目 录
14.8.6 PCI Express控制器寄存器 14-197
14.11.4 寄存器偏移地址变量表寄存器概览 14-303
插图目录
图14-10 SPI单帧帧格式(SPO=0、SPH=0) 14-53
图14-11 SPI连续帧帧格式(SPO=0、SPH=0) 14-54
图14-12 SPI单帧帧格式(SPO=0、SPH=1) 14-54
图14-13 SPI连续帧帧格式(SPO=0、SPH=1) 14-55
图14-14 SPI单帧帧格式(SPO=1、SPH=0) 14-55
图14-15 SPI连续帧帧格式(SPO=1、SPH=0) 14-56
图14-16 SPI单帧帧格式(SPO=1、SPH=1) 14-56
图14-17 SPI连续帧帧格式(SPO=1、SPH=1) 14-57
图14-21 National Semiconductor Microwire单帧帧格式 14-59
图14-22 National Semiconductor Microwire连续帧帧格式 14-59
图14-30 1bit数据线传输模式下的块数据格式 14-82
图14-31 4bit数据线传输模式下的块数据格式 14-83
图14-32 发送单个NEC with simple repeat code码的帧格式 14-141
图14-33 持续按键连续发送NEC with simple repeat code码的帧格式 14-141
图14-34 NEC with simple repeat code码bit0和bit1定义 14-142
图14-35 NEC with simple repeat code码单发代码格式 14-142
图14-36 NEC with simple repeat code码连发代码格式 14-142
图14-37 发送单个NEC with full repeat code码的帧格式 14-143
图14-38 持续按键连续发送NEC with full repeat code码的帧格式 14-143
图14-39 NEC with full repeat code码bit0和bit1定义 14-143
图14-40 NEC with full repeat code码单发代码格式 14-143
图14-42 持续按键连续发送TC9012码的帧格式 14-144
图14-43 TC9012码bit0和bit1定义 14-145
图14-45 TC9012码连发代码格式(C0=1) 14-145
图14-46 TC9012码连发代码格式(C0=0) 14-145
图14-48 持续按键连续发送SONY码帧格式 14-146
图14-52 PCIe与USB3差分管脚复用示意图 14-176
图14-53 PCIe 控制器应用框图(RC模式外接EP设备) 14-177
图14-54 PCIe控制器与PCIe switch设备连接应用框图(RC模式) 14-177
图14-55 芯片与RC设备连接应用框图(EP模式) 14-178
图14-56 PCIe控制器配置事务本地地址字段定义 14-181
图14-57 CPU在本地总线上发起读/写请求,且总线地址各字段组成如图14-57和图14-58配置,就可由PCIe控制器发起存储器读/写事务。PCIe控制器存储器事务本地地址字段定义 14-182
图14-58 PCIe控制器扩展存储器事务本地地址字段定义 14-182
图14-62 MSI报文结构与MSI Capability寄存器 14-194
图14-65 连续扫描模式下通道轮询扫描示意图 14-282
表格目录
表14-2 7bit寻址,写操作对应的时序描述配置 14-5
表14-3 7bit寻址,直接读操作的时序描述配置 14-6
表14-4 10bit寻址,写操作对应的时序描述配置 14-7
表14-5 10bit寻址,组合读对应的时序描述配置 14-9
表14-11 spi_3wire寄存器概览(基地址0x0_1107_2000) 14-74
表14-12 芯片中3个MMC控制器对应的功能信号和管脚名 14-76
表14-16 MMC寄存器概览(eMMC基地址是0x0_1002_0000;SDIO0基址是0x0_1003_0000;SDIO1基地址是0x0_1004_0000) 14-88
表14-17 红外接收数据码型的统计表(NEC with simple repeat code) 14-139
表14-18 红外接收数据码型的统计表(NEC with full repeat code) 14-139
表14-19 红外接收数据码型的统计表(TC9012和SONY码) 14-140
表14-20 IR寄存器概览(基址是0x0_110F_0000) 14-149
表14-23 PCI Express接口信号描述 14-176
表14-25 PCIe_iATU寄存器概览(基址是0x0_103D_0000) 14-202
表14-26 PCIe_DMA寄存器概览(基址是0x0_103D_0000) 14-210
表14-28 PCIe_MSI中断管理单元寄存器概览(基址0x0_103D_0000) 14-227
表14-29 PCIe内部系统控制寄存器概览(基址是0x0_103D_0000) 14-230
表14-30 USB2.0 PHY寄存器概览(PHY0基址是0x0_1031_0000;PHY1基址是0x0_1033_0000) 14-237
表14-31 USB3.0寄存器概览(USB3.0 HOST基址是0x0_1030_0000,USB3.0 DRD基地址是0x0_1032_0000) 14-238
表14-32 LSADC寄存器概览(基地址:0x0_1108_0000) 14-284
外围设备
I2C
概述
I2C(Inter-Integrated Circuit)控制器为Master接口,完成CPU对I2C总线上连接的从设备的读写访问。
芯片共有6个I2C控制器。6个控制器的工作时钟由相应CRG寄存器的i2c_cksel选择。
功能描述
I2C控制器具有以下功能特点:
- 芯片的I2C是Master接口,支持标准时序和非标准时序。
- 支持多主设备时的总线仲裁。
- 支持Clock synchronization和Bit and Byte waiting。
- 支持标准地址(7bit)和扩展地址(10bit)。
- 传输速率支持标准模式(100kbit/s)和快速模式(400kbit/s)。
- 支持General Call和Start Byte功能。
- 不支持CBUS器件。
- 支持DMA操作。
- 支持64 x 8bit的TX FIFO和64 x 8bit的RX FIFO。
功能框图

时序描述原理
时序描述包括时序格式描述和时序数据准备两部分。时序格式描述通过配置I2C_TIMING_CMD、I2C_LOOP1、I2C_DST1、I2C_LOOP2、I2C_DST2、I2C_LOOP3、I2C_DST3实现,既能配置出标准时序也能配置出非标准时序。
- 时序数据准备通过配置I2C_DEV_ADDR、I2C_DATA_BUF、I2C_PATTERN_DATA1、I2C_PATTERN_DATA2、I2C_TX_FIFO实现,配置的数值都是需要发送到从设备的。
- 在时序格式描述时,I2C_TIMING_CMD配置的是时序命令信息,I2C_LOOP1、I2C_DST1、I2C_LOOP2、I2C_DST2、I2C_LOOP3、I2C_DST3配置的是跳转控制信息。I2C_TIMING_CMD可以配置的时序命令信息如表14-1所示。
| 时序命令编号 | 时序命令代号 | 时序命令含义 |
|---|---|---|
| 0x00 | EXIT | 结束,用于控制器退出 |
| 0x01 | S | 总线START |
| 0x02 | SDA4 | 发送dev_addr_byte4 |
| 0x03 | SDA3 | 发送dev_addr_byte3 |
| 0x04 | SDA2 | 发送dev_addr_byte2 |
| 0x05 | SDA1 | 发送dev_addr_byte1 |
| 0x06 | SDB4 | 发送data_buf_byte4 |
| 0x07 | SDB3 | 发送data_buf_byte3 |
| 0x08 | SDB2 | 发送data_buf_byte2 |
| 0x09 | SDB1 | 发送data_buf_byte1 |
| 0x0A | SPD8 | 发送pattern_data_byte8 |
| 0x0B | SPD7 | 发送pattern_data_byte7 |
| 0x0C | SPD6 | 发送pattern_data_byte6 |
| 0x0D | SPD5 | 发送pattern_data_byte5 |
| 0x0E | SPD4 | 发送pattern_data_byte4 |
| 0x0F | SPD3 | 发送pattern_data_byte3 |
| 0x10 | SPD2 | 发送pattern_data_byte2 |
| 0x11 | SPD1 | 发送pattern_data_byte1 |
| 0x12 | RD | 接收1字节数据 注意:执行RD命令时,若RX FIFO满了,则控制器会等待直到RX FIFO有空位;等待期间控制器不会改变I2C总线的状态。 |
| 0x13 | RACK | 接收低电平应答 |
| 0x14 | RNACK | 接收高电平非应答 |
| 0x15 | RNC | 接收应答,高电平低电平都无所谓 |
| 0x16 | SACK | 发送低电平应答 |
| 0x17 | SNACK | 发送高电平非应答 |
| 0x18 | JMPN1 | 有限次数跳转,目的由DST1寄存器指出,次数由LOOP1寄存器指出 |
| 0x19 | JMPN2 | 有限次数跳转,目的由DST2寄存器指出,次数由LOOP2寄存器指出 |
| 0x1A | JMPN3 | 有限次数跳转,目的由DST3寄存器指出,次数由LOOP3寄存器指出 |
| 0x1B | UNDEF | 未定义 |
| 0x1C | UNDEF | 未定义 |
| 0x1D | UDB1 | 从TX FIFO 更新数据到 data_buf_byte1 注意:执行UDB1命令时,若TX FIFO为空,则控制器会等待直到TX FIFO有数据;等待期间控制器不会改变I2C总线的状态。 |
| 0x1E | SR | 总线repeated START |
| 0x1F | P | 总线STOP |
标准时序----7bit寻址,写操作

图14-2对应的时序描述配置如表14-2所示。
| 类型 | 寄存器 | 配置 |
|---|---|---|
| 时序格式描述 | I2C_TIMING_CMD[0] | S |
| I2C_TIMING_CMD[1] | SDA1 | |
| I2C_TIMING_CMD[2] | RACK | |
| I2C_TIMING_CMD[3] | UDB1 | |
| I2C_TIMING_CMD[4] | SDB1 | |
| I2C_TIMING_CMD[5] | RACK | |
| I2C_TIMING_CMD[6] | JMPN1 | |
| I2C_TIMING_CMD[7] | P | |
| I2C_TIMING_CMD[8] | EXIT | |
| I2C_LOOP1 | n | |
| I2C_DST1 | 3 | |
| 时序数据准备 | I2C_DEV_ADDR | (Slave Address+‘0’)共8bit |
| I2C_TX_FIFO | TXD0、TXD1、…TXDn依次写入。 |
标准时序----7bit寻址,直接读操作

图14-3对应的时序描述配置如表14-3所示。
| 类型 | 寄存器 | 配置 |
|---|---|---|
| 时序格式描述 | I2C_TIMING_CMD[0] | S |
| I2C_TIMING_CMD[1] | SDA1 | |
| I2C_TIMING_CMD[2] | RACK | |
| I2C_TIMING_CMD[3] | RD | |
| I2C_TIMING_CMD[4] | SACK | |
| I2C_TIMING_CMD[5] | JMPN1 | |
| I2C_TIMING_CMD[6] | RD | |
| I2C_TIMING_CMD[7] | SNACK | |
| I2C_TIMING_CMD[8] | P | |
| I2C_TIMING_CMD[9] | EXIT | |
| I2C_LOOP1 | n-1 | |
| I2C_DST1 | 3 | |
| 时序数据准备 | I2C_DEV_ADDR | (Slave Address+‘1’)共8bit |
说明
读回的数据RXD0、RXD1、… RXDn依次填入I2C_RX_FIFO。
标准时序----10bit寻址,写操作

图14-4对应的时序描述配置如表14-4所示。
| 类型 | 寄存器 | 配置 |
|---|---|---|
| 时序格式描述 | I2C_TIMING_CMD[0] | S |
| I2C_TIMING_CMD[1] | SDA1 | |
| I2C_TIMING_CMD[2] | RACK | |
| I2C_TIMING_CMD[3] | SDA2 | |
| I2C_TIMING_CMD[4] | RACK | |
| I2C_TIMING_CMD[5] | UDB1 | |
| I2C_TIMING_CMD[6] | WDB1 | |
| I2C_TIMING_CMD[7] | RACK | |
| I2C_TIMING_CMD[8] | JMPN1 | |
| I2C_TIMING_CMD[9] | P | |
| I2C_TIMING_CMD[10] | EXIT | |
| I2C_LOOP1 | n | |
| I2C_DST1 | 5 | |
| 时序数据准备 | I2C_DEV_ADDR | (Slave Address 1st 7Bits +‘0’) 共8bit写入dev_addr_byte1; (Slave Address 2nd Byte) 写入dev_addr_byte2。 |
| I2C_TX_FIFO | TXD0、TXD1、…TXDn依次写入。 |
标准时序----10bit寻址,组合读操作

图14-5对应的时序描述配置如表14-5所示。
| 类型 | 寄存器 | 配置 |
|---|---|---|
| 时序格式描述 | I2C_TIMING_CMD[0] | S |
| I2C_TIMING_CMD[1] | SDA1 | |
| I2C_TIMING_CMD[2] | RACK | |
| I2C_TIMING_CMD[3] | SDA2 | |
| I2C_TIMING_CMD[4] | RACK | |
| I2C_TIMING_CMD[5] | UDB1 | |
| I2C_TIMING_CMD[6] | WDB1 | |
| I2C_TIMING_CMD[7] | RACK | |
| I2C_TIMING_CMD[8] | JMPN1 | |
| I2C_TIMING_CMD[9] | SR | |
| I2C_TIMING_CMD[10] | SDA3 | |
| I2C_TIMING_CMD[11] | RACK | |
| I2C_TIMING_CMD[12] | RD | |
| I2C_TIMING_CMD[13] | SACK | |
| I2C_TIMING_CMD[14] | JMPN2 | |
| I2C_TIMING_CMD[15] | RD | |
| I2C_TIMING_CMD[16] | SNACK | |
| I2C_TIMING_CMD[17] | P | |
| I2C_TIMING_CMD[18] | EXIT | |
| I2C_LOOP1 | n | |
| I2C_DST1 | 5 | |
| I2C_LOOP2 | m-1 | |
| I2C_DST2 | 12 | |
| 时序数据准备 | I2C_DEV_ADDR | (Slave Address 1st 7Bits +‘0’) 共8bit写入dev_addr_byte1; (Slave Address 2nd Byte) 写入dev_addr_byte2;(Slave Address 1st 7Bits +‘1’) 共8bit写入dev_addr_byte3。 |
| I2C_TX_FIFO | TXD0、TXD1、…TXDn依次写入。 |
说明
读回的数据RXD0、RXD1、… RXDm依次填入I2C_RX_FIFO
非标准时序举例
非标准时序为非I2C标准协议,图14-6为一个非标准时序,此时序连续向从设备发送64Byte数据才接收一个应答。

图14-6对应的时序描述配置如表14-6所示。
| 类型 | 寄存器 | 配置 |
|---|---|---|
| 时序格式描述 | I2C_TIMING_CMD[0] | S |
| I2C_TIMING_CMD[1] | SDA1 | |
| I2C_TIMING_CMD[2] | RACK | |
| I2C_TIMING_CMD[3] | UDB1 | |
| I2C_TIMING_CMD[4] | SDB1 | |
| I2C_TIMING_CMD[5] | JMPN1 | |
| I2C_TIMING_CMD[6] | RACK | |
| I2C_TIMING_CMD[7] | P | |
| I2C_TIMING_CMD[8] | EXIT | |
| I2C_LOOP1 | 63 | |
| I2C_DST1 | 3 | |
| 时序数据准备 | I2C_DEV_ADDR | (Slave Address+‘0’)共8bit |
| I2C_TX_FIFO | TXD0、TXD1、…TXD63依次写入。 |
工作方式
非DMA方式下的数据传输(中断方式写操作)
请遵循以下步骤:
配置I2C_HCNT和I2C_LCNT,使控制器工作在正确的模式下。
配置I2C_TX_WATERMARK为0x20。
配置I2C_GLB,使能控制器。
根据实际时序,参考14.1.4 时序描述原理完成时序配置。
配置I2C_CTRL1为0x1,启动控制器。
配置I2C_INTR_EN为0x811。
在中断服务程序里,查询I2C_INTR_STAT,若arb_lost或ack_bit_unmatch为1,则认为是异常,否则,若tx_lt_watermark为1中断,此时可往TX FIFO里填入多达32个待写数据。
- 如果还有待写数据,则配置I2C_INTR_RAW为0x10,清除触发本次中断处理的tx_lt_watermark中断,然后等待下一次中断服务程序被触发。
- 如果已经没有待写数据,则配置I2C_INTR_EN为0x1801,然后等待all_cmd_done中断,收到all_cmd_done中断时,表示所有数据都已经写到从设备端。
配置I2C_INTR_EN为0x0,I2C_INTR_RAW为0x1fff,清除中断并且禁止中断上报,为不同工作方式之间的切换做好清理工作。
----结束
非DMA方式下的数据传输(查询方式写操作)
请遵循以下步骤:
配置I2C_HCNT和I2C_LCNT,使控制器工作在正确的模式下。
配置I2C_GLB,使能控制器。
根据实际时序,参考14.1.4 时序描述原理完成时序配置。
配置I2C_CTRL1为0x1,启动控制器。
不断查询I2C_FIFO_STAT [tx_fifo_not_full],查到为1后,将1Byte待写数据写入TX FIFO。当所有待写数据都写入TX FIFO后,执行下一步骤。
不断查询I2C_INTR_RAW,查到arb_lost_raw 或者ack_bit_unmatch_raw为1则认为是异常,查到all_cmd_done_raw为1则表示所有时序已经完成。
配置I2C_INTR_EN为0x0,I2C_INTR_RAW为0x1fff,清除中断并且禁止中断上报,为不同工作方式之间的切换做好清理工作。
----结束
非DMA方式下的数据传输(中断方式读操作)
请遵循以下步骤:
配置I2C_HCNT和I2C_LCNT,使控制器工作在正确的模式下。
配置I2C_RX_WATERMARK为0x20。
配置I2C_GLB,使能控制器。
根据实际时序,参考14.1.4 时序描述原理完成时序配置。
配置I2C_CTRL1为0x1,启动控制器。
配置I2C_INTR_EN为0x1805。
在中断服务程序里,查询I2C_INTR_STAT,当arb_lost 或ack_bit_unmatch为1则认为异常,如无异常,all_cmd_done为1说明所有数据都已经读回。如无异常同时all_cmd_done为0说明rx_gt_watermark中断,此时可以从RX FIFO里读出32个已读回的数据。读走32个数据后配置I2C_INTR_RAW为0x4,清除触发本次中断处理的rx_gt_watermark中断,然后等待下一次中断服务程序被触发。
配置I2C_INTR_EN为0x0,I2C_INTR_RAW为0x1fff,清除中断并且禁止中断上报,为不同工作方式之间的切换做好清理工作。
----结束
非DMA方式下的数据传输(查询方式读操作)
请遵循以下步骤:
配置I2C_HCNT和I2C_LCNT,使控制器工作在正确的模式下。
配置I2C_GLB,使能控制器。
根据实际时序,参考14.1.4 时序描述原理完成时序配置。
配置I2C_CTRL1为0x1,启动控制器。
不断查询I2C_FIFO_STAT [rx_fifo_not_empty],查到为1后,从RX FIFO中读出1Byte数据。当所有数据都已读回,执行下一步骤。
不断查询I2C_INTR_RAW,查到arb_lost_raw或者ack_bit_unmatch_raw为1则认为是异常,查到all_cmd_done_raw为1则表示所有时序已经完成。
配置I2C_INTR_EN为0x0,I2C_INTR_RAW为0x1fff,清除中断并且禁止中断上报,为不同工作方式之间的切换做好清理工作。
----结束
DMA方式下的数据传输(写操作)
请遵循以下步骤:
获取一个DMAC通道。
完成DMAC通道的设置并启动。
配置I2C_HCNT和I2C_LCNT,使控制器工作在正确的模式下。
配置I2C_TX_WATERMARK为0x10(该值仅为示例,具体配置值应根据实际使用决定)。
配置I2C_GLB,使能控制器。
根据实际时序,参考14.1.4 时序描述原理完成时序配置。
配置I2C_CTRL1为0x201,启动控制器。
等待DMAC完成中断。
不断查询I2C_INTR_RAW,查到arb_lost_raw或者ack_bit_unmatch_raw为1则认为是异常,查到all_cmd_done_raw为1则表示所有时序已经完成。
配置I2C_INTR_EN为0x0,I2C_INTR_RAW为0x1fff,清除中断并且禁止中断上报,为不同工作方式之间的切换做好清理工作。
----结束
DMA方式下的数据传输(读操作)
请遵循以下步骤:
获取一个DMAC通道。
完成DMAC通道的设置并启动。
配置I2C_HCNT和I2C_LCNT,使控制器工作在正确的模式下。
配置I2C_RX_WATERMARK为0x10(该值仅为示例,具体配置值应根据实际使用决定)。
配置I2C_GLB,使能控制器。
根据实际时序,参考14.1.4 时序描述原理完成时序配置。
配置I2C_CTRL1为0x301,启动控制器。
等待DMAC完成中断。
不断查询I2C_INTR_RAW,查到arb_lost_raw或者ack_bit_unmatch_raw为1则认为是异常,查到all_cmd_done_raw为1则表示所有时序已经完成。
配置I2C_INTR_EN为0x0,I2C_INTR_RAW为0x1fff,清除中断并且禁止中断上报,为不同工作方式之间的切换做好清理工作。
----结束
异常处理流程
请遵循以下步骤:
配置I2C_GLB [i2c_enable] 为0,禁止控制器。
配置I2C_INTR_EN为0x0,I2C_INTR_RAW为0x1fff,清除中断并且禁止中断上报,为不同工作方式之间的切换做好清理工作。
----结束
I2C寄存器概览
I2C基地址如下:
- I2C0寄存器基地址:0x0_1106_0000
- I2C1寄存器基地址:0x0_1106_1000
- I2C2寄存器基地址:0x0_1106_2000
- I2C3寄存器基地址:0x0_1106_3000
- I2C4寄存器基地址:0x0_1106_4000
- I2C5寄存器基地址:0x0_1106_5000
I2C寄存器偏移地址中变量的取值范围和含义如表14-7所示。
| 变量名称 | 取值范围 | 描述 |
|---|---|---|
| n | 0~31 | I2C时序命令,最多支持32个时序命令 |
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x0000 | I2C_GLB | I2C全局配置寄存器 | 14-16 |
| 0x0004 | I2C_HCNT | I2C高电平时长寄存器 | 14-17 |
| 0x0008 | I2C_LCNT | I2C低电平时长寄存器 | 14-18 |
| 0x0010 | I2C_DEV_ADDR | I2C器件地址寄存器 | 14-18 |
| 0x0014 | I2C_DATA_BUF | I2C数据buf寄存器 | 14-19 |
| 0x0018 | I2C_PATTERN_DATA1 | I2C PATTERN数据1寄存器 | 14-19 |
| 0x001C | I2C_PATTERN_DATA2 | I2C PATTERN数据2寄存器 | 14-19 |
| 0x0020 | I2C_TX_FIFO | I2C TX FIFO数据寄存器 | 14-20 |
| 0x0024 | I2C_RX_FIFO | I2C RX FIFO数据寄存器 | 14-20 |
| 0x0030+n x 4 | I2C_TIMING_CMD | I2C时序命令寄存器 | 14-20 |
| 0x00B0 | I2C_LOOP1 | I2C循环次数1寄存器 | 14-22 |
| 0x00B4 | I2C_DST1 | I2C跳转目的1寄存器 | 14-22 |
| 0x00B8 | I2C_LOOP2 | I2C循环次数2寄存器 | 14-23 |
| 0x00BC | I2C_DST2 | I2C跳转目的2寄存器 | 14-23 |
| 0x00C0 | I2C_LOOP3 | I2C循环次数3寄存器 | 14-23 |
| 0x00C4 | I2C_DST3 | I2C跳转目的3寄存器 | 14-23 |
| 0x00C8 | I2C_TX_WATERMARK | I2C TX FIFO水线寄存器 | 14-24 |
| 0x00CC | I2C_RX_WATERMARK | I2C RX FIFO水线寄存器 | 14-24 |
| 0x00D0 | I2C_CTRL1 | I2C控制寄存器1 | 14-24 |
| 0x00D4 | I2C_CTRL2 | I2C控制寄存器2 | 14-25 |
| 0x00D8 | I2C_FIFO_STAT | I2C FIFO状态寄存器 | 14-26 |
| 0x00E0 | I2C_INTR_RAW | I2C原始中断寄存器 | 14-27 |
| 0x00E4 | I2C_INTR_EN | I2C中断使能寄存器 | 14-28 |
| 0x00E8 | I2C_INTR_STAT | I2C中断状态寄存器 | 14-30 |
I2C寄存器描述
I2C_GLB
I2C_GLB为I2C全局配置寄存器。
Offset Address: 0x0000 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:24] | - | reserved | 保留。 | 0x00 |
| [23:8] | RW | sda_hold_duration | SDA hold time时长。建议配置为0xa。 注意:只能控制从主机发往从设备的数据的hold time时长。 | 0x0000 |
| [7:1] | - | reserved | 保留。 | 0x00 |
| [0] | RW | i2c_enable | I2C使能控制。 0:禁止;此时会清空TX FIFO和RX FIFO。 1:使能。 注意:若出现时序异常,请先禁止控制器,然后再使能,以防TX FIFO和RX FIFO有上次操作的残留数据。 | 0x0 |
I2C_HCNT
I2C_HCNT为I2C高电平时长寄存器。
Offset Address: 0x0004 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:16] | - | reserved | 保留 | 0x0000 |
| [15:0] | RW | i2c_high_duration | SCL 高电平时长。 建议在标准模式下为SCL周期的1/2,快速模式下为SCL周期的0.36。 标准模式下: i2c_high_duration = (FI2C_CLK/FSCL) x 0.5 快速模式下: i2c_high_duration = (FI2C_CLK/FSCL) x 0.36 (FSCL为SCL总线的频率) 以参考时钟为50MHz且工作在快速模式下(FSCL = 400kHz)为例,i2c_high_duration =(50MHz / 400kHz) x 0.36=45。 | 0x0000 |
I2C_LCNT
I2C_LCNT为I2C低电平时长寄存器。
Offset Address: 0x0008 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:16] | - | reserved | 保留。 | 0x0000 |
| [15:0] | RW | i2c_low_duration | SCL低电平时长。 建议在标准模式下为SCL周期的1/2,快速模式下为SCL周期的0.64。 标准模式下: i2c_low_duration = (FI2C_CLK/FSCL) x 0.5 快速模式下: i2c_low_duration = (FI2C_CLK/FSCL) x 0.64 (FSCL为SCL总线的频率) 以参考时钟为50MHz且工作在快速模式下(FSCL = 400 kHz)为例,i2c_low_duration=(50MHz / 400kHz) x 0.64=80。 | 0x0000 |
I2C_DEV_ADDR
I2C_DEV_ADDR为I2C器件地址寄存器。
Offset Address: 0x0010 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:24] | RW | dev_addr_byte4 | 器件地址字节4。 | 0x00 |
| [23:16] | RW | dev_addr_byte3 | 器件地址字节3。 | 0x00 |
| [15:8] | RW | dev_addr_byte2 | 器件地址字节2。 | 0x00 |
| [7:0] | RW | dev_addr_byte1 | 器件地址字节1。 | 0x00 |
I2C_DATA_BUF
I2C_DATA_BUF为I2C数据buf寄存器。
Offset Address: 0x0014 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:24] | RW | data_buf_byte4 | 数据buf字节4。 | 0x00 |
| [23:16] | RW | data_buf_byte3 | 数据buf字节3。 | 0x00 |
| [15:8] | RW | data_buf_byte2 | 数据buf字节2。 | 0x00 |
| [7:0] | RW | data_buf_byte1 | 数据buf字节1。 | 0x00 |
I2C_PATTERN_DATA1
I2C_PATTERN_DATA1为I2C PATTERN数据1寄存器。
Offset Address: 0x0018 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:24] | RW | pattern_data_byte4 | PATTERN数据字节4。 | 0x00 |
| [23:16] | RW | pattern_data_byte3 | PATTERN数据字节3。 | 0x00 |
| [15:8] | RW | pattern_data_byte2 | PATTERN数据字节2。 | 0x00 |
| [7:0] | RW | pattern_data_byte1 | PATTERN数据字节1。 | 0x00 |
I2C_PATTERN_DATA2
I2C_PATTERN_DATA2为I2C PATTERN数据2寄存器。
Offset Address: 0x001C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:24] | RW | pattern_data_byte8 | PATTERN数据字节8。 | 0x00 |
| [23:16] | RW | pattern_data_byte7 | PATTERN数据字节7。 | 0x00 |
| [15:8] | RW | pattern_data_byte6 | PATTERN数据字节6。 | 0x00 |
| [7:0] | RW | pattern_data_byte5 | PATTERN数据字节5。 | 0x00 |
I2C_TX_FIFO
I2C_TX_FIFO为I2C TX FIFO数据寄存器。
Offset Address: 0x0020 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:8] | - | reserved | 保留。 | 0x000000 |
| [7:0] | WO | tx_fifo | TX FIFO入口。 写入的数据是待发送出去的数据。 | 0x00 |
I2C_RX_FIFO
I2C_RX_FIFO为I2C RX FIFO数据寄存器。
Offset Address: 0x0024 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:8] | - | reserved | 保留。 | 0x000000 |
| [7:0] | RO | rx_fifo | RX FIFO出口。 读出的数据是I2C总线上收到的数据。 | 0x00 |
I2C_TIMING_CMD
I2C_TIMING_CMD为I2C时序命令寄存器。
Offset Address: 0x0030+n x 4 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:5] | - | reserved | 保留。 | 0x0000000 |
| [4:0] | RW | timing_cmd | 时序命令。n = 0,1,2,… 31. 0x00:EXIT(结束,用于逻辑退出); 0x01:S (总线START); 0x02:WDA4 (发送dev_addr_byte4); 0x03:WDA3 (发送dev_addr_byte3); 0x04:WDA2 (发送dev_addr_byte2); 0x05:WDA1 (发送dev_addr_byte1); 0x06:WDB4 (发送data_buf_byte4); 0x07:WDB3 (发送data_buf_byte3); 0x08:WDB2 (发送data_buf_byte2); 0x09:WDB1 (发送data_buf_byte1); 0x0A:WPD8 (发送pattern_data_byte8); 0x0B:WPD7 (发送pattern_data_byte7); 0x0C:WPD6 (发送pattern_data_byte6); 0x0D:WPD5 (发送pattern_data_byte5); 0x0E:WPD4 (发送pattern_data_byte4); 0x0F:WPD3 (发送pattern_data_byte3); 0x10:WPD2 (发送pattern_data_byte2); 0x11:WPD1 (发送pattern_data_byte1); 0x12:RD (接收1字节数据); 0x13:RACK (接收低电平应答); 0x14:RNACK (接收高电平非应答); 0x15:RNC (接收应答,高低电平都无所谓); 0x16:SACK (发送低电平应答); 0x17:SNACK (发送高电平非应答); 0x18:JMPN1(有限次数跳转,目的由DST1寄存器指出,次数由LOOP1寄存器指出); 0x19:JMPN2(有限次数跳转,目的由DST2寄存器指出,次数由LOOP2寄存器指出); 0x1A:JMPN3(有限次数跳转,目的由DST3寄存器指出,次数由LOOP3寄存器指出); 0x1B:UNDEF (未定义); 0x1C:UNDEF (未定义); 0x1D:UDB1 (从TX FIFO 更新数据到 data_buf_byte1); 0x1E:SR (总线repeated START); 0x1F:P(总线STOP)。 注意: 执行UDB1命令时,若TX FIFO为空,则控制器会等待直到TX FIFO有数据;等待期间控制器不会改变I2C总线的状态。 执行RD命令时,若RX FIFO满了,则控制器会等待直到RX FIFO有空位;等待期间控制器不会改变I2C总线的状态。 | 0x00 |
I2C_LOOP1
I2C_LOOP1为I2C循环次数1寄存器。
Offset Address: 0x00B0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | loop_num1 | 指定循环次数。 | 0x00000000 |
I2C_DST1
I2C_DST1为I2C跳转目的1寄存器。
Offset Address: 0x00B4 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:5] | RW | reserved | 保留。 | 0x0000000 |
| [4:0] | RW | dst_timing_cmd1 | 指定跳转到哪个时序命令寄存器。 | 0x00 |
I2C_LOOP2
I2C_LOOP2为I2C循环次数2寄存器。
Offset Address: 0x00B8 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | loop_num2 | 指定循环次数。 | 0x00000000 |
I2C_DST2
I2C_DST2为I2C跳转目的2寄存器。
Offset Address: 0x00BC Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:5] | RW | reserved | 保留。 | 0x0000000 |
| [4:0] | RW | dst_timing_cmd2 | 指定跳转到哪个时序命令寄存器。 | 0x00 |
I2C_LOOP3
I2C_LOOP3为I2C循环次数3寄存器。
Offset Address: 0x00C0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | loop_num3 | 指定循环次数。 | 0x00000000 |
I2C_DST3
I2C_DST3为I2C跳转目的3寄存器。
Offset Address: 0x00C4 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:5] | RW | reserved | 保留。 | 0x0000000 |
| [4:0] | RW | dst_timing_cmd3 | 指定跳转到哪个时序命令寄存器。 | 0x00 |
I2C_TX_WATERMARK
I2C_TX_WATERMARK为I2C TX FIFO水线寄存器。
Offset Address: 0x00C8 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:6] | RO | reserved | 保留。 | 0x0000000 |
| [5:0] | RW | tx_watermark | TX FIFO水线。当TX FIFO里的数据数目比tx_watermark小时,tx_lt_watermark_raw原始中断会被置1。 | 0x00 |
I2C_RX_WATERMARK
I2C_RX_WATERMARK为I2C RX FIFO水线寄存器。
Offset Address: 0x00CC Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:6] | - | reserved | 保留。 | 0x0000000 |
| [5:0] | RW | rx_watermark | RX FIFO水线。当RX FIFO里的数据数目比rx_watermark大时,rx_gt_watermark_raw原始中断会被置1。 | 0x00 |
I2C_CTRL1
I2C_CTRL1为I2C控制寄存器1。
Offset Address: 0x00D0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:10] | - | reserved | 保留。 | 0x000000 |
| [9:8] | RW | dma_operation | DMA操作控制。 00:非DMA方式; 01:保留; 10:DMA写方式; 11:DMA读方式。 | 0x0 |
| [7:1] | - | reserved | 保留。 | 0x00 |
| [0] | RW | start | 启动控制。写1会启动控制器内部的状态机去执行时序命令序列,执行完毕或者异常后逻辑会反向把此位清0。 0:不启动; 1:启动。 | 0x0 |
I2C_CTRL2
I2C_CTRL2为I2C控制寄存器2。
Offset Address: 0x00D4 Total Reset Value: 0x11110011
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:29] | - | reserved | 保留。 | 0x0 |
| [28] | RO | i2c_scl_oen | 监测内部I2C的SDA输出电平。 0:SDA输出低电平; 1:SDA输出高电平。 | 0x1 |
| [27:25] | - | reserved | 保留。 | 0x0 |
| [24] | RO | i2c_sda_oen | 监测内部I2C的SCL输出电平。 0:SCL输出低电平; 1:SCL输出高电平。 | 0x1 |
| [23:21] | - | reserved | 保留。 | 0x0 |
| [20] | RO | i2c_scl_in | 监测外部I2C总线SCL的电平。 0:总线上SCL为低电平; 1:总线上SCL为高电平。 | 0x1 |
| [19:17] | - | reserved | 保留。 | 0x0 |
| [16] | RO | i2c_sda_in | 监测外部I2C总线SDA的电平。 0:总线上SDA为低电平; 1:总线上SDA为高电平。 | 0x1 |
| [15:9] | - | reserved | 保留。 | 0x00 |
| [8] | RW | gpio_mode | 将I2C的SCL和SDA管脚配置成gpio模式,管脚电平由force_scl_oe_n和force_sda_oe_n决定。 0:禁止; 1:使能。 | 0x0 |
| [7:5] | - | reserved | 保留。 | 0x0 |
| [4] | RW | force_scl_oen | 在gpio_mode有效时控制SCL管脚电平。 0:SCL管脚为低电平; 1:SCL管脚为高电平。 | 0x1 |
| [3:1] | - | reserved | 保留。 | 0x0 |
| [0] | RW | force_sda_oen | 在gpio_mode有效时控制SDA管脚电平。 0:SDA管脚为低电平; 1:SDA管脚为高电平。 | 0x1 |
I2C_FIFO_STAT
I2C_FIFO_STAT为I2C FIFO状态寄存器。
Offset Address: 0x00D8 Total Reset Value: 0x000A_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:20] | - | reserved | 保留 | 0x000 |
| [19] | RO | tx_fifo_not_full | TX FIFO非满指示。 0:满; 1:非满。 | 0x1 |
| [18] | RO | tx_fifo_not_empty | TX FIFO非空指示。 0:空; 1:非空。 | 0x0 |
| [17] | RO | rx_fifo_not_full | RX FIFO非满指示。 0:满; 1:非满。 | 0x1 |
| [16] | RO | rx_fifo_not_empty | RX FIFO非空指示。 0:空; 1:非空。 | 0x0 |
| [15] | - | reserved | 保留。 | 0x0 |
| [14:8] | RO | tx_fifo_vld_num | TX FIFO里的有效数目。 | 0x00 |
| [7] | - | reserved | 保留。 | 0x0 |
| [6:0] | RO | rx_fifo_vld_num | RX FIFO里的有效数目。 | 0x00 |
I2C_INTR_RAW
I2C_INTR_RAW为I2C原始中断寄存器。
Offset Address: 0x00E0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:13] | - | reserved | 保留。 | 0x00000 |
| [12] | RWC | all_cmd_done_raw | 时序命令序列执行到EXIT命令时产生此中断。 0:无中断; 1:有中断。 | 0x0 |
| [11] | RWC | arb_lost_raw | 仲裁丢失。 0:无中断; 1:有中断。 | 0x0 |
| [10] | RWC | start_det_raw | 检查到START。 0:无中断; 1:有中断。 | 0x0 |
| [9] | RWC | stop_det_raw | 检查到STOP。 0:无中断; 1:有中断。 | 0x0 |
| [8:5] | - | reserved | 保留。 | 0x0 |
| [4] | RWC | tx_lt_watermark_raw | 发送数据时,TX FIFO里的数据数目低于水线。 0:无中断; 1:有中断。 | 0x0 |
| [3] | - | reserved | 保留。 | 0x0 |
| [2] | RWC | rx_gt_watermark_raw | 接收数据时,RX FIFO里的数据数目高于水线。 0:无中断; 1:有中断。 | 0x0 |
| [1] | - | reserved | 保留。 | 0x0 |
| [0] | RWC | ack_bit_unmatch_raw | 应答位不符合预期。 0:无中断; 1:有中断。 | 0x0 |
I2C_INTR_EN
I2C_INTR_EN为I2C中断使能寄存器。
Offset Address: 0x00E4 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:13] | - | reserved | 保留。 | 0x00000 |
| [12] | RW | all_cmd_done_en | all_cmd_done中断使能。 0:不使能; 1:使能。 | 0x0 |
| [11] | RW | arb_lost_en | arb_lost中断使能。 0:不使能; 1:使能。 | 0x0 |
| [10] | RW | start_det_en | start_det中断使能。 0:不使能; 1:使能。 | 0x0 |
| [9] | RW | stop_det_en | STOP中断使能。 0:不使能; 1:使能。 | 0x0 |
| [8:5] | - | reserved | 保留。 | 0x0 |
| [4] | RW | tx_lt_watermark_en | tx_lt_watermark中断使能。 0:不使能; 1:使能。 | 0x0 |
| [3] | - | reserved | 保留。 | 0x0 |
| [2] | RW | rx_gt_watermark_en | rx_gt_watermark中断使能。 0:不使能; 1:使能。 | 0x0 |
| [1] | - | reserved | 保留。 | 0x0 |
| [0] | RW | ack_bit_unmatch_en | ack_bit_unmatch中断使能。 0:不使能; 1:使能。 | 0x0 |
I2C_INTR_STAT
I2C_INTR_STAT为I2C中断状态寄存器。
Offset Address: 0x00E8 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:13] | - | reserved | 保留。 | 0x00000 |
| [12] | RO | all_cmd_done | 所有时序命令正常完成。 0:无中断; 1:有中断。 | 0x0 |
| [11] | RO | arb_lost | 仲裁丢失。 0:无中断; 1:有中断。 | 0x0 |
| [10] | RO | start_det | 检查到START。 0:无中断; 1:有中断。 | 0x0 |
| [9] | RO | stop_det | 检查到STOP。 0:无中断; 1:有中断。 | 0x0 |
| [8:5] | - | reserved | 保留。 | 0x0 |
| [4] | RO | tx_lt_watermark | 发送数据时,TX FIFO里的数据数目低于水线。 0:无中断; 1:有中断。 | 0x0 |
| [3] | - | reserved | 保留。 | 0x0 |
| [2] | RO | rx_gt_watermark | 接收数据时,RX FIFO里的数据数目高于水线。 0:无中断; 1:有中断。 | 0x0 |
| [1] | - | reserved | 保留。 | 0x0 |
| [0] | RO | ack_bit_unmatch | 应答位不符合预期。 0:无中断; 1:有中断。 | 0x0 |
UART
概述
通用异步收发器UART(Universal Asynchronous Receiver Transmitter)是一个异步串行的通信接口,主要功能是将来自外围设备的数据进行串并转换之后传入内部总线,以及将数据进行并串转换之后输出到外部设备。UART的主要功能是和外部芯片的UART进行对接,从而实现两芯片间的通信。
芯片供6个UART控制器:
- UART0:2线UART,主要用于调试。
- UART1/2/5:4线UART。
- UART3/4:2线UART。
须知
当使用UART功能时,需要在UART初始化前对RXD管脚配置为上拉使能。具体的配置寄存器请参考Hi3403V100_PINOUT_CN.xlsx。
例如:当使用系统的UART0时,需要配置iocfg_reg95的bit[8]为高。
特点
UART模块有以下特点:
- 支持256 x 8bit的发送FIFO和256 x 12bit的接收FIFO。
- 支持数据位和停止位的位宽可编程。数据位可通过编程设定为5/6/7/8比特;停止位可通过编程设定为1bit或2bit。
- 支持奇、偶校验方式或者无校验。
- 支持传输速率可编程。
- 支持接收FIFO中断、发送FIFO中断、接收超时中断、错误中断。
- 支持初始中断状态查询和屏蔽后中断状态查询。
- 支持通过编程禁止UART模块或者UART发送/接收功能以降低功耗。
- 支持关断UART时钟以节省功耗。
- 支持DMA操作。
功能描述
应用框图
UART的典型应用框图如图14-7所示。
须知
UART是一种异步双向串行总线,它提供了一种简单有效的数据传输方式,只需要两根数据线互相对接。
功能原理
UART的一次帧传输主要包括起始信号、数据、校验位和结束信号,如图14-8所示。数据帧从某一UART的TXD端输出,从另一个UART的RXD端输入。

起始信号、数据、校验位和结束信号的含义如下:
- 起始信号(start bit)
一个数据帧开始的标志,UART协议规定TXD信号出现一个低电平就表示一个数据帧的开始。在UART不传输数据时,应该保持高电平。
- 数据信号(data bit)
数据位宽可以根据不同的应用要求进行调整,可以配置成5bit/6bit/7bit/8bit数据位宽。
- 校验位(parity bit)
校验位是1比特纠错信号,UART的校验位有奇校验、偶校验和固定校验位,同时支持校验位的使能和禁止,详细描述请见UART_LCR_H寄存器。
- 结束信号(stop bit)
结束信号即数据帧的停止位,支持1比特和2比特停止位两种配置。数据帧的结束信号就是把TXD拉成高电平。
工作方式
波特率配置
通过配置寄存器UART_IBRD和UART_FBRD可以设置UART工作的波特率,波特率计算公式为:
当前波特率=UART参考时钟频率(100MHz、50MHz、24MHz或3MHZ)/(16 x 分频系数)
分频系数有整数和小数两部分组成,分别对应寄存器UART_IBRD和UART_FBRD。
例如:UART参考时钟频率为24MHz,如果配置UART_IBRD为0x1E,UART_FBRD为0x00,按照波特率计算公式,则当前的波特率为24/(16 x 30)=0.05Mbit/s。
UART波特率配置的典型值为:9,600bit/s、14,400bit/s、19,200bit/s、38,400bit/s、57,600bit/s、76,800bit/s、115,200bit/s、230,400bit/s、460,800bit/s。
分频系数值的计算以及分频系数寄存器的配置举例如下:
如果要求波特率为230,400bit/s,并且UART参考时钟频率为24MHz,那么分频系数为(24 x 106)/(16 x 230400)= 6.5104,因此IBRD(整数部分)为6,FBRD(小数部分)为0.5104。
计算6bitUART_FBRD寄存器中的数值:根据m=integer(FBRDx2n+0.5)(n=UART_FBRD寄存器的宽度),计算出m=integer(0.5104x26+0.5)=33,在UART_IBRD寄存器中配置0x0006,UART_FBRD寄存器中配置0x21。
当分频系数小数部分配置成33时,波特率除数的实际数值为6+33/26=6.5156,产生的波特率为(24 x 106)/(16 x 6.5156)=230216.7107,误差率为(230216.7107–230400)/230400x100=-0.07956%。
使用6bitUART_FBRD寄存器最大的误差率为1/26 x 100=1.56%,当m=1时会出现,误差率累计超过64个时钟周期。
软复位
说明
复位寄存器请参考3.2.6 CRG寄存器描述。
复位后各配置寄存器的值均为默认值,因此复位后需要重新对这些寄存器进行初始化配置。
中断或查询方式下的数据传输
初始化
初始化步骤如下:
向UART_CR bit[0]写0,使UART处于禁止状态。
写相应的配置值到UART_IBRD、UART_FBRD寄存器,配置传输速率。
配置UART_CR、UART_LCR_H,设定相应的UART工作模式。
配置UART_IFLS设定相应的发送及接收FIFO阈值。
如果驱动程序采用中断方式则需设定UART_IMSC,使能相应中断信号;采用查询方式时应禁止产生相应中断信号。
向UART_CR bit[0]写1,使能UART,完成初始化配置。
----结束
数据发送
数据发送步骤如下:
将发送数据写入UART_DR,启动数据发送。
查询方式下,进行连续数据发送时通过读取UART_FR bit[5]检测TX_FIFO状态,根据TX_FIFO的状态决定是否向TX_FIFO中发送数据;中断方式下,则根据相应中断状态位检测;决定是否向TX_FIFO中发送数据。
通过检测UART_FR bit[7]是否为1,判断UART是否完成全部数据发送。
----结束
数据接收
数据接收的处理方式如下:
- 查询方式下,进行数据接收时通过读取UART_FR [rxfe]检测RX_FIFO状态,根据RX_FIFO的状态决定是否读取RX_FIFO中的数据。
- 中断方式下,则根据相应中断状态位检测决定是否读取RX_FIFO中的数据。
DMA方式下的数据传输
初始化
初始化步骤如下:
向UART_CR[uarten]写0,使UART处于禁止状态。
写相应的配置值到UART_IBRD、UART_FBRD寄存器,配置传输速率。
配置UART_CR、UART_LCR_H,设定相应的UART工作模式。
配置UART_IFLS设定相应的发送及接收FIFO阈值。
如果驱动程序采用中断方式则需设定UART_IMSC,使能相应中断信号;采用查询方式时应禁止产生相应中断信号。
向UART_CR [uarten]写1,使能UART,完成初始化配置。
----结束
数据发送
数据发送(以DMA模式为例)步骤如下:
配置DMA数据通道,包括数据传输源和目的地址、数据传输个数、传输类型等参数。具体配置时请参见“直接存储器存取控制器”的相关描述。
配置UART_DMACR为0x2,使能UART的DMA发送功能。
通过DMA中断上报,判断数据是否发送完成,如果完成则关闭UART的DMA发送功能。
----结束
数据接收
数据接收(以DMA模式为例)步骤如下:
配置DMA数据通道,包括数据传输源和目的地址、数据接收区地址、数据传输个数、传输类型等参数。
配置UART_DMACR为0x1,使能UART的DMA接收功能。
通过DMA状态查询,判断数据是否接收完成,如果完成则关闭UART的DMA接收功能。
----结束
UART寄存器概览
地址空间内:
- UART0寄存器基地址:0x0_1104_0000
- UART1寄存器基地址:0x0_1104_1000
- UART2寄存器基地址:0x0_1104_2000
- UART3寄存器基地址:0x0_1104_3000
- UART4寄存器基地址:0x0_1104_4000
- UART5寄存器基地址:0x0_1104_5000
UART寄存器概览如表14-9所示。
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x000 | UART_DR | 数据寄存器 | 14-37 |
| 0x004 | UART_RSR | 接收状态寄存器/错误清除寄存器 | 14-38 |
| 0x018 | UART_FR | 标志寄存器 | 14-39 |
| 0x024 | UART_IBRD | 整数波特率寄存器 | 14-41 |
| 0x028 | UART_FBRD | 小数波特率寄存器 | 14-41 |
| 0x02C | UART_LCR_H | 线控寄存器 | 14-42 |
| 0x030 | UART_CR | 控制寄存器 | 14-43 |
| 0x034 | UART_IFLS | 中断FIFO阈值选择寄存器 | 14-45 |
| 0x038 | UART_IMSC | 中断屏蔽寄存器 | 14-46 |
| 0x03C | UART_RIS | 原始中断状态寄存器 | 14-47 |
| 0x040 | UART_MIS | 屏蔽后中断状态寄存器 | 14-48 |
| 0x044 | UART_ICR | 中断清除寄存器 | 14-49 |
| 0x048 | UART_DMACR | DMA控制寄存器 | 14-50 |
UART寄存器描述
UART_DR
UART_DR为UART数据寄存器,存放接收数据和发送数据,同时可以从该寄存器中读出接收状态。
Offset Address: 0x000 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:12] | - | reserved | 保留。 | 0x0 |
| [11] | RO | oe | 溢出错误。 0:无溢出错误; 1:有溢出错误,接收FIFO满后接收到了数据。 | 0x0 |
| [10] | RO | be | Break错误。 0:无break错误; 1:有break错误,即接收数据的输入保持低的时间比一个全字传输(包括start、data、parity、stop bit)还要长。 | 0x0 |
| [9] | RO | pe | 校验错误。 0:无校验错误; 1:有校验错误。 | 0x0 |
| [8] | RO | fe | 帧错误。 0:无帧错误; 1:有帧错误(错误的停止位)。 | 0x0 |
| [7:0] | RW | data | 接收数据和发送数据。 | 0x00 |
UART_RSR
UART_RSR为接收状态寄存器/错误清除寄存器。
- 寄存器读时作为接收状态寄存器。
- 寄存器写时作为错误清除寄存器。
接收状态也可以从UART_DR中读出。从UART_DR中读出的break、frame、parity的状态信息要比从UART_RSR读出的信息优先级高(即UART_DR中的状态变化比UART_RSR更快)。
对UART_RSR寄存器的任何写操作都会对UART_RSR寄存器进行复位。
Offset Address: 0x004 Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [7:4] | - | reserved | 保留。 | 0x0 |
| [3] | RW | oe | 溢出错误。 0:无溢出错误; 1:溢出错误。 当FIFO满时,FIFO中的内容保持有效,因为不会有下一个数据写到FIFO中,只是移位寄存器会溢出。CPU必须立刻读数据以腾空FIFO。 | 0x0 |
| [2] | RW | be | Break错误。 0:无break错误; 1:break错误。 Break的条件:接收数据的输入保持低的时间比一个全字传输(定义了start、data、parity、stop bit)还要长。 | 0x0 |
| [1] | RW | pe | 校验错误。 0:无校验错误; 1:接收数据的校验错误。 FIFO模式下,该错误与FIFO顶部的数据相关联。 | 0x0 |
| [0] | RW | fe | 帧错误。 0:无帧错误; 1:接收到的数据的停止位错误(有效的停止位为1)。 | 0x0 |
UART_FR
UART_FR为UART标志寄存器。
Offset Address: 0x018 Total Reset Value: 0x0096
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:8] | - | reserved | 保留。 | 0x00 |
| [7] | RO | txfe | 该位的含义由UART_LCR_H[fen]的状态决定。 - 如果UART_LCR_H[fen]为0,则当发送holding register空时该位置1; - 如果UART_LCR_H[fen]为1,则当发送FIFO为空时该位置1。 | 0x1 |
| [6] | RO | rxff | 该位的含义由UART_LCR_H[fen]的状态决定。 - 如果UART_LCR_H[fen]为0,则当接收holding register满时该位置1; - 如果UART_LCR_H[fen]为1,则当接收FIFO为满时该位置1。 | 0x0 |
| [5] | RO | txff | 该位的含义由UART_LCR_H[fen]的状态决定。 - 如果UART_LCR_H[fen]为0,则当发送holding register满时该位置1; - 如果UART_LCR_H[fen]为1,当发送FIFO为满时该位置1。 | 0x0 |
| [4] | RO | rxfe | 该位的含义由UART_LCR_H[fen]的状态决定。 - 如果UART_LCR_H[fen]为0,则当接收holding register空时该bit置1; - 如果UART_LCR_H[fen]为1,则当接收FIFO为空时该位就置1。 | 0x1 |
| [3] | RO | busy | UART忙闲状态位。 0:UART空闲或者完成发送数据; 1:UART正忙于发送数据。 该位一旦置位,该状态一直保持到整个字节(包括所有的停止位)完全从移位寄存器中发送出去。 一旦发送FIFO非空该位就置位,不管UART使能与否。 | 0x0 |
| [2:0] | - | reserved | 保留。 | 0x6 |
UART_IBRD
UART_IBRD为整数波特率寄存器。
Offset Address: 0x024 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
| [15:0] | RW | baud divint | 整数波特率分频值。复位时全部清0。 | 0x0000 |
UART_FBRD
UART_FBRD为小数波特率寄存器。
须知
- 整数波特率寄存器和小数波特率寄存器的值必须等到当前数据发送和接收完毕才能更新。
- 最小的分频值为1,最大的分频值为65535(216 - 1)。即UART_IBRD=0是无效的,而此时UART_FBRD将被忽略。同样,如果UART_IBRD=65535(0xFFFF),UART_FBRD就只能是0,如果比0大,则会导致发送和接收的失败。
Offset Address: 0x028 Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
| [7:6] | - | reserved | 保留。 | 0x0 |
| [5:0] | RW | baud divfrac | 小数波特率分频值。复位时全部清0。 | 0x00 |
UART_LCR_H
UART_LCR_H为线控寄存器,UART_LCR_H、UART_IBRD、UART_FBRD组成一个30bit宽的寄存器。如果更新UART_IBRD和UART_FBRD的内容,必须同时更新UART_LCR_H。
Offset Address: 0x02C Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:8] | - | reserved | 保留。 | 0x00 |
| [7] | RW | sps | stick parity选择。 - 当本寄存器的bit[1]、bit[2]、bit[7]被置位时,校验位就会作为0发送和检测; - 当本寄存器的bit[1]、bit[7]被置位,bit[2]为0时,校验位就会作为1发送和检测。 - 当本寄存器的bit[7]为0时,stick parity禁止。 因为按照现在的说法,其功能应该是检验被禁止,而该bit只与stick parity相关。。 | 0x0 |
| [6:5] | RW | wlen | 指示发送和接收一个帧里数据比特的数目。 00:5bit; 01:6bit; 10:7bit; 11:8bit。 | 0x0 |
| [4] | RW | fen | 发送和接收FIFO使能控制。 0:不使能发送和接收FIFO; 1:发送和接收FIFO使能。 | 0x0 |
| [3] | RW | stp2 | 发送帧尾2bit停止位判断。 0:发送的帧尾没有2bit停止位; 1:发送的帧尾有2bit停止位。 接收逻辑在接收时不检查2bit的停止位。 | 0x0 |
| [2] | RW | eps | 发送和接收过程中的奇偶校验选择。 0:在发送和接收过程中生成奇校验或检查奇校验; 1:在发送和接收过程中生成偶校验或检查偶校验。 当UART_LCR_H[pen]为0时,该位不起作用。 | 0x0 |
| [1] | RW | pen | 校验选择位。 0:不作校验; 1:发送方向产生校验,接收方向作校验检查。 | 0x0 |
| [0] | RW | brk | 发送break。 0:无效; 1:在完成当前数据的发送后,UTXD连续输出低电平。 注意: 要正确的执行break命令,软件将该位置1的时间必须超过2个完整帧;在正常使用中,该位必须清0。 | 0x0 |
UART_CR
UART_CR为UART控制寄存器。
配置UART_CR遵循以下步骤:
向UART_CR[uarten]写0,禁止UART。
等待当前数据发送或接收结束。
将UART_LCR_H[fen]清0。
配置UART_CR。
向UART_CR[uarten]写1,使能UART。
----结束
Offset Address: 0x030 Total Reset Value: 0x0300
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15] | RW | ctsen | CTS硬件流控使能。 0:不使能CTS硬件流控; 1:使能CTS硬件流控,只有当nUARTCTS信号有效时才发送数据。 | 0x0 |
| [14] | RW | rtsen | RTS硬件流控使能。 0:不使能RTS硬件流控; 1:使能RTS硬件流控,只有当接收FIFO有空间时才请求接收数据。 | 0x0 |
| [13:12] | - | reserved | 保留。 | 0x0 |
| [11] | RW | rts | 请求发送。 该bit为UART modem状态输出信号nUARTRTS的取反。 0:输出信号不变; 1:即该bit配置为1,则输出信号为0。 | 0x0 |
| [10] | RW | dtr | 数据发送准备。 该bit为UART modem状态输出信号nUARTDTR的取反。 0:输出信号不变; 1:即该bit配置为1,则输出信号为0。 | 0x0 |
| [9] | RW | rxe | UART接收使能。 0:禁止; 1:使能。 在接收的过程中如果UART被禁止,则当前数据的接收就会在正常停止之前结束。 | 0x1 |
| [8] | RW | txe | UART发送使能。 0:禁止; 1:使能。 在发送的过程中如果UART被禁止,则当前数据的发送就会在正常停止之前结束。 | 0x1 |
| [7] | RW | lbe | 环回使能。 0:禁止; 1:UARTTXD输出环回到UARTRXD。 | 0x0 |
| [6:1] | - | reserved | 保留。 | 0x00 |
| [0] | RW | uarten | UART使能。 0:禁止; 1:使能。 如果在发送和接收过程中将UART禁止,则会在正常停止之前结束当前数据的传送。 | 0x0 |
UART_IFLS
UART_IFLS为中断FIFO阈值选择寄存器,用于设置FIFO的中断(UART_TXINTR或UART_RXINTR)触发线。
Offset Address: 0x034 Total Reset Value: 0x0012
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:6] | - | reserved | 保留。 | 0x000 |
| [5:3] | RW | rxiflsel | 接收中断FIFO的阈值选择,接收中断的触发点如下。 000:接收FIFO≥1/8full; 001:接收FIFO≥1/4full; 010:接收FIFO≥1/2full; 011:接收FIFO≥3/4full; 100:接收FIFO≥7/8full; 101:接收FIFO≥1/16full 110:接收FIFO≥1/32full 111:保留。 | 0x2 |
| [2:0] | RW | txiflsel | 发送中断FIFO的阈值选择,发送中断的触发点如下。 000:发送FIFO≤1/8full; 001:发送FIFO≤1/4full; 010:发送FIFO≤1/2full; 011:发送FIFO≤3/4full; 100:发送FIFO≤7/8full; 101:发送FIFO≤15/16full; 110:发送FIFO≤31/32full; 111:保留。 | 0x2 |
UART_IMSC
UART_IMSC为中断屏蔽寄存器,用于屏蔽中断。
Offset Address: 0x038 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:11] | - | reserved | 保留。 | 0x00 |
| [10] | RW | oeim | 溢出错误中断的屏蔽状态。 0:屏蔽该中断; 1:不屏蔽该中断。 | 0x0 |
| [9] | RW | beim | break错误中断的屏蔽状态。 0:屏蔽该中断; 1:不屏蔽该中断。 | 0x0 |
| [8] | RW | peim | 校验中断的屏蔽状态。 0:屏蔽该中断; 1:不屏蔽该中断。 | 0x0 |
| [7] | RW | feim | 帧错误中断的屏蔽状态。 0:屏蔽该中断; 1:不屏蔽该中断。 | 0x0 |
| [6] | RW | rtim | 接收超时中断的屏蔽状态。 0:屏蔽该中断; 1:不屏蔽该中断。 | 0x0 |
| [5] | RW | txim | 发送中断的屏蔽状态。 0:屏蔽该中断; 1:不屏蔽该中断。 | 0x0 |
| [4] | RW | rxim | 接收中断的屏蔽状态。 0:屏蔽该中断; 1:不屏蔽该中断。 | 0x0 |
| [3:0] | - | reserved | 保留。 | 0x0 |
UART_RIS
UART_RIS为原始中断状态寄存器,其内容不受中断屏蔽寄存器的影响。
Offset Address: 0x03C Total Reset Value: 0x0002
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:11] | - | reserved | 保留。 | 0x00 |
| [10] | RO | oeris | 原始的溢出错误中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [9] | RO | beris | 原始的break错误中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [8] | RO | peris | 原始的校验中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [7] | RO | feris | 原始的错误中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [6] | RO | rtris | 原始的接收超时中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [5] | RO | txris | 原始的发送中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [4] | RO | rxris | 原始的接收中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [3:0] | - | reserved | 保留。 | 0x2 |
UART_MIS
UART_MIS为屏蔽后中断状态寄存器,其内容为原始中断状态和中断屏蔽进行“与”操作后的结果。
Offset Address: 0x040 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:11] | - | reserved | 保留。 | 0x00 |
| [10] | RO | oemis | 屏蔽后的溢出错误中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [9] | RO | bemis | 屏蔽后的break错误中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [8] | RO | pemis | 屏蔽后的校验中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [7] | RO | femis | 屏蔽后的错误中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [6] | RO | rtmis | 屏蔽后的接收超时中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [5] | RO | txmis | 屏蔽后的发送中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [4] | RO | rxmis | 屏蔽后的接收中断状态。 0:未产生中断; 1:已产生中断。 | 0x0 |
| [3:0] | - | reserved | 保留。 | 0x0 |
UART_ICR
UART_ICR为中断清除寄存器,写1时相应的中断被清除,写0则不起作用。
Offset Address: 0x044 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:11] | - | reserved | 保留。 | 0x00 |
| [10] | WO | oeic | 清除溢出错误中断。 0:无效; 1:清除中断。 | 0x0 |
| [9] | WO | beic | 清除break错误中断。 0:无效; 1:清除中断。 | 0x0 |
| [8] | WO | peic | 清除校验中断。 0:无效; 1:清除中断。 | 0x0 |
| [7] | WO | feic | 清除错误中断。 0:无效; 1:清除中断。 | 0x0 |
| [6] | WO | rtic | 清除接收超时中断。 0:无效; 1:清除中断。 | 0x0 |
| [5] | WO | txic | 清除发送中断。 0:无效; 1:清除中断。 | 0x0 |
| [4] | WO | rxic | 清除接收中断。 0:无效; 1:清除中断。 | 0x0 |
| [3:0] | - | reserved | 保留。 | 0x0 |
UART_DMACR
UART_DMACR为DMA控制寄存器,用于配置发送FIFO和接收FIFO的DMA使能。
Offset Address: 0x048 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
| [15:4] | - | reserved | 保留。 | 0x0000 |
| [3] | RW | rxlastsreq_en | UART RX DMA支持最后一笔数据的REQ使能。使能打开后,传输最后一笔数据时会发出LASTREQ给DMA控制器。 0:禁止; 1:使能。 | 0x0 |
| [2] | RW | dmaonerr | UART错误中断(UARTEINTR)出现时的接收通道DMA使能控制。 0:当UART错误中断(UARTEINTR)有效时,接收通道DMA的请求输出(UARTRXDMASREQ或UARRTXDMABREQ)有效; 1:当UART错误中断(UARTEINTR)有效时,接收通道DMA的请求输出(UARTRXDMASREQ或UARRTXDMABREQ)无效。 | 0x0 |
| [1] | RW | txdmae | 发送FIFO的DMA使能控制。 0:禁止; 1:使能。 | 0x0 |
| [0] | RW | rxdmae | 接收FIFO的DMA使能控制。 0:禁止; 1:使能。 | 0x0 |
SPI
概述
SPI控制器实现数据的串并、并串转换,可以作为Master与外部设备进行同步串行通信。支持Motorola SPI接口、TI串行同步接口和National Semiconductor MicroWire接口三种外设接口协议。
特点
须知
- 芯片总共有4组SPI接口。
- 工作参考时钟为99MHz。SPI0/1/2/3主模式输出的SPI_CLK最大支持25MHz,SPI0/1/2/3从模式输入的SPI_CLK最大支持12.5MHz。
SPI的功能特点有:
- 接口时钟频率可编程。
- 4组SPI接口都支持主模式和从模式。
- SPI1支持双片选,其他组SPI只支持单片选。片选信号支持极性可配。
- 接收FIFO的宽度为16bit、深度为256。
- 发送FIFO的宽度为16bit、深度为256。
- 串行数据帧长度可编程:4bit~16bit。
- 内部提供环回测试模式。
- 支持DMA操作。
- 支持Motorola SPI、TI同步串行、National Semiconductor MicroWire三种接口,支持单帧和连续帧格式。
- 支持SPI全双工工作模式,时钟极性、相位可配置。
- 支持MicroWire半双工工作模式。
- 支持TI同步串行接口全双工工作模式。
功能描述
典型应用
SPI接Slave时的应用框图如图14-9所示。

三种外设总线时序
图14-10~图14-17中的缩略语含义为:
- MSB:Most Significant Bit
- LSB:Least Significant Bit
- Q:Q is an undefined signal
Motorola SPI接口
说明
SPO表示SPICLKOUT极性,SPH表示SPICLKOUT相位。它们是寄存器SPICR0 bit[7:6]。
SPO=0、SPH=0
SPI单帧帧格式如图14-10所示。

SPI连续帧帧格式如图14-11所示。

在该模式下,当SPI处于空闲状态时:
- SPI_CLK信号设置为低
- SPI_CS_N信号设置为高
- 发送数据线SPI_DO强制为低
当SPI处于使能状态,而且发送FIFO内存在有效数据时,设置SPI_CS_N信号为低,表示开始传输数据。来自Slave的数据立刻发送到Master的接收数据线SPI_DI。半个SPI_CLK时钟周期之后,有效的Master数据传输到SPI_DO。此时Master和Slave数据都已经有效,SPI_CLK管脚在接下来的半个SPI_CLK时钟周期之后变为高电平。数据在SPI_CLK时钟的上升沿被捕获,在时钟的下降沿被传送。
如果传输单个word,当捕捉到最后1bit数据时,SPI_CS_N在接下来的1个SPI_CLK时钟周期之后恢复为高电平。
如果是连续的传输,SPI_CS_N信号在每个word传输之间必须将SPI_CLK时钟拉高一个时钟周期。这是因为SPH为0时,Salve选择管脚会固定其内部串行设备寄存器的数据,使它不会变化。因此在连续传输时,主设备必须在每个word传输之间将SPI_CS_N信号拉高。连续传输结束时,SPI_CS_N在捕获到最后1bit之后的1个SPI_CLK时钟周期之后恢复为高电平。
SPO=0、SPH=1
SPI单帧帧格式如图14-12所示。

SPI连续帧帧格式如图14-13所示。

在该模式下,当SPI处于空闲状态时:
- SPI_CLK信号设置为低
- SPI_CS_N设置为高
- 发送数据线SPI_DO强制为低
当SPI为使能状态,而且发送FIFO内有有效数据时,设置SPI_CS_N信号为低表示开始传输数据。半个SPI_CLK时钟周期之后,Master和Slave的有效数据分别在各自的传输线上有效。同时,SPI_CLK从第一个上升沿开始有效。数据在SPI_CLK时钟的下降沿被捕获,在时钟的上升沿被传送。
如果传输单个word,当捕捉到最后1bit数据时,SPI_CS_N在接下来的1个SPI_CLK时钟之后恢复为高电平。
当连续传输时,在传输数据word之间SPI_CS_N保持为低。连续传输结束时,SP_CS_N在最后1bit捕获之后的1个SPI_CLK时钟之后恢复为高电平。
SPO=1、SPH=0
SPI单帧帧格式如图14-14所示。

SPI连续帧帧格式如图14-15所示。

在该配置下,当SPI处于空闲状态时:
- SPI_CLK信号设置为高
- SPI_CS_N信号设置为高
- 发送数据线SPI_DO强制为低
当SPI为使能状态,而且发送FIFO内有有效数据时,设置SPI_CS_N信号为低表示开始传输数据。此时Slave的数据立刻发送到Master的接收数据线SPI_DI。半个SPI_CLK周期之后,Master的有效数据传送到SPI_DO。再过半个SPI_CLK时钟周期之后,SPI_CLK Master管脚设置为低。这表示数据在SPI_CLK时钟的下降沿被捕获,在SPI_CLK时钟的上升沿被传送。
如果传输单个word,当捕捉到最后1bit数据时,SPI_CS_N在接下来的1个SPI_CLK时钟之后恢复为高电平。
如果是连续的传输,SPI_CS_N信号在每个word传输之间必须拉高。这是因为当SPH为0时,Salve选择管脚固定其内部串行设备寄存器的数据,使它不会变化。SPI_CS_N在捕获到最后1bit数据之后的1个SPI_CLK时钟周期之后恢复为高电平。
SPO=1、SPH=1
SPI单帧帧格式如图14-16所示。

SPI连续帧帧格式如图14-17所示。

在该模式下,当SPI处于空闲状态时:
- SPI_CLK信号设置为高
- SPI_CS_N信号设置为高
- 发送数据线SPI_DO强制为低
当SPI为使能状态,而且发送FIFO内有有效数据时,设置SPI_CS_N Master信号为低表示开始传输数据。半个SPI_CLK时钟周期后,Master和Slave数据在各自的传输线上有效。同时,时钟SPI_CLK从1个下降沿开始有效。数据在SPI_CLK时钟的上升沿被捕获,在时钟的下降沿被传送。当传输单个word时,SPI_CS_N在传输的最后1bit捕获之后的1个SPI_CLK时钟周期之后恢复为高电平。
如果是连续传输,SPI_CS_N信号始终保持为低。SPI_CS_N在捕获到最后1bit之后的1个SPI_CLK时钟周期之后恢复到高状态。对于连续传输来说,SPI_CS_N在传输过程中一直保持为低,结束方式与单个传输方式相同。
(5)接口时序

TI同步串行接口
TI同步串行单帧帧格式如图14-19所示。

TI同步串行连续帧帧格式如图14-20所示。

在该模式下,当SPI处于空闲状态时:
- SPI_CK为低电平。
- SPI_CS_N为低电平。
- 传输数据线SPIDO保持为高阻。
一旦发送FIFO有数据,SPICSN就会产生一个SPICK时钟周期的高电平脉冲,将被发送的数据就会从发送FIFO传送到发送逻辑串行移位寄存器。在SPICK时钟的下一个上升沿,4bit~16bit数据帧的MSB就会从SPIDO移位输出。同样,从外部串行slave设备接收数据的MSB会从SPIDI管脚移位输入。
SPI和片外串行设备在SPICK时钟的下降沿将数据存入串行移位寄存器。接收串行寄存器在接收到LSB之后的第一个SPICK时钟上升沿将数据送给接收FIFO。
National Semiconductor Microwire接口
National Semiconductor Microwire单帧帧格式如图14-21所示。
National Semiconductor Microwire单帧帧格式

在SPIDO LSB结束和SPIDI MSB开始之间可以延迟0~255个时钟周期。
National Semiconductor Microwire连续帧帧格式如图14-22所示。
National Semiconductor Microwire连续帧帧格式

在SPI_DO LSB结束和SPI_DI MSB开始之间可以延迟0~255个时钟周期。
Microwire的格式与SPI的格式非常相近,使用master-slave信息的传输技术,只不过SPI是全双工通信,而Microwire半双工通信。在SPI向外部芯片发送串行数据的时候,都要先加8bit控制字。在这个过程中,SPI没有接收到任何数据。传输完毕之后,片外芯片对接收到的数据进行解码,在与8bit控制信息间隔一个时钟周期之后,slave开始响应所需求的数据。返回的数据长度为4bit~16bit,使得整个帧的长度为13bit~25bit。
在该模式下,当SPI处于空闲状态时:
- SPI_CLK信号设置为低电平。
- SPI_CS_N设置为高电平。
- 发送数据线SPI_DO强制为低电平。
向发送FIFO内部写进一个控制字节开始一次传送。SPI_CS_N的下降沿引发数据的传输,发送FIFO的数据被发送到串行移位寄存器,8bit控制帧的MSB被发送到发送管脚SPIDO。在帧的传送过程中,SPI_CS_N保持为低。SPI_DI在这个传送过程中保持为高阻。
片外的串行从设备在SPI_CLK时钟的每一个上升沿将数据锁存到串行移位寄存器中。当从设备锁存完最后1个bit的数据之后,在接下来的1个时钟周期的等待时间里,对接收到的数据开始解码,然后从设备反馈给SPI所要求的数据。每1个bit都是在SPICK时钟的下降沿写到SPI_DI的。对单个数据传送来说,在帧的结尾,SPI_CS_N在最后1个bit写到接收串行寄存器之后的1个时钟周期后拉高,这样就使接收到的数据传送到接收FIFO。
对于连续的传送来说,数据传送的开始和结束都和单个数据的传送方式相同。在这个传送过程中,信号SPI_CS_N时一直保持为低的,传送的数据也是连续的。下一帧的控制字直接和上一帧的LSB相邻。当帧的LSB锁存到SPI之后,接收到的每一个数值都是在SPI_CLK时钟的下降沿取自接收移位寄存器。
工作方式
工作模式
SPI的工作模式分为中断或查询方式下的数据传输和DMA方式下的数据传输。
时钟与复位
输出SPI时钟频率计算方式如下:
Fsspclkout = Fsspclk / (CPSDVSR x (1+SCR))
Fsspclk:SPI的工作参考时钟100MHz。
CPSDVSR、SCR请查询SPICPSR、SPICR0。
支持独立软复位和时钟门控,具体请参见3.2.6 CRG寄存器描述章节。
中断处理
SPI有5个中断,其中前4个是独立中断源、可屏蔽、高电平有效。
- SPIRXINTR
接收FIFO中断请求。当接收FIFO中有4个或更多的有效数据时,该中断置位。
- SPITXINTR
发送FIFO中断请求。当发送FIFO中有4个或更少的有效数据时,该中断置位。
- SPIRORINTR
接收overrun中断请求。当FIFO已满,且又有新的数据需要写入FIFO时,会引起FIFO overrun,该中断置位。此时数据被写入接收移位寄存器,而不是FIFO。
- SPIRTINTR
接收time out中断请求。当接收FIFO非空,且SPI处于idle态超过一个固定的32bit周期,该中断置位。
此时表明接收FIFO中仍有数据需要传输。如果接收FIFO被读空或者当有新的数据被接收到SPIRXD中,该中断解除置位。也可以通过写寄存器SPIICR[RTIC]清除该中断。
- SPIINTR
组合中断,为以上4个中断经过“或”运算后的结果。如果上述4个独立中断中任意一个置位且使能,该中断置位。
SPI的中断SPIINTR请参见中断处理章节。
初始化
初始化步骤如下:
向寄存器SPICR1 [sse]写“0”,禁止SPI。
写寄存器SPICR0,配置帧格式及传输数据位宽等参数。
配置寄存器SPICPSR,设定时钟分频因子。
中断方式下,设置寄存器SPIIMSC,使能相应中断信号;查询、DMA方式下,应禁止产生相应中断信号。
中断或DMA方式,设置SPITXFIFOCR和SPIRXFIFOCR。
DMA方式下,配置寄存器SPIDMACR,使能SPI的DMA功能。
----结束
查询方式下的数据传输
具体步骤如下:
向寄存器SPICR1 [sse]写“1”,使能SPI。
将需发送的数据连续写到寄存器SPIDR。
轮询寄存器SPISR,直到[BSY]=0(表示总线不忙)、[TFE]=1(表示发送FIFO已空)、[RNE]=1(表示接收FIFO非空)。
读出数据,需保证读空接收FIFO(可通过查询SPISR [RNE]得到)。
须知
Motorola SPI/TI同步串行接口的全双工特性,每发一个数据就接收一个数据,即使只需发送数据,也需要清空接收FIFO。
向寄存器SPICR1 [sse]写“0”,禁止SPI。
----结束
中断方式下的数据传输
具体步骤如下:
向寄存器SPICR1 [sse]写“1”,使能SPI。
将需发送的数据连续写到寄存器SPIDR。
等待中断SPIRXINTR,读出数据。循环直到读出所有数据。
须知
Motorola SPI/TI同步串行接口的全双工特性,每发一个数据就接收一个数据,即使只需发送数据,也需要清空接收FIFO。
向寄存器SPICR1 [sse]写“0”,禁止SPI。
----结束
DMA方式下的数据传输
具体步骤如下:
获取一个DMAC通道。
向寄存器SPICR1 [sse]写“1”,使能SPI。
发送数据
配置该DMAC通道的配置寄存器和控制寄存器中的相关参数。
启动DMAC,响应SPI发送FIFO的DMA请求进行数据传输。
通过DMA中断上报,判断数据是否发送完成,如果完成则关闭SPI的DMA功能。
接收数据
配置该DMAC通道的配置寄存器和控制寄存器中的相关参数。
启动DMAC,响应SPI接收FIFO的DMA请求进行数据传输。
通过DMA中断上报,判断数据是否接收完成,如果完成则关闭SPI的DMA功能。
向寄存器SPICR1 [sse]写“0”,禁止SPI。
----结束
寄存器概览
SPI寄存器概览如表14-10所示。
- SPI0寄存器基地址:0x0_1107_0000
- SPI1寄存器基地址:0x0_1107_1000
- SPI2寄存器基地址:0x0_1107_3000
- SPI3寄存器基地址:0x0_1107_4000
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x000 | SPICR0 | 控制寄存器0 | 14-64 |
| 0x004 | SPICR1 | 控制寄存器1 | 14-66 |
| 0x008 | SPIDR | 数据寄存器 | 14-67 |
| 0x00C | SPISR | 状态寄存器 | 14-67 |
| 0x010 | SPICPSR | 时钟分频寄存器 | 14-68 |
| 0x014 | SPIIMSC | 中断屏蔽寄存器 | 14-68 |
| 0x018 | SPIRIS | 原始中断状态寄存器 | 14-69 |
| 0x01C | SPIMIS | 屏蔽后中断状态寄存器 | 14-69 |
| 0x020 | SPIICR | 中断清除寄存器 | 14-70 |
| 0x024 | SPIDMACR | DMA控制寄存器 | 14-70 |
| 0x028 | SPITXFIFOCR | 发送FIFO控制寄存器 | 14-71 |
| 0x02C | SPIRXFIFOCR | 接收FIFO控制寄存器 | 14-72 |
寄存器描述
SPICR0
SPICR0为控制寄存器0。
Offset Address: 0x000 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:8] | RW | SCR | 串行时钟率,取值范围0~255。SCR的值用来产生SPI发送和接收的比特率,公式为Fsspclk / (CPSDVSR x (1+SCR))。 CPSDVSR是一个2~254之间的偶数,由寄存器SPICPSR配置。 | 0x00 |
| [7] | RW | SPH | SPICLKOUT相位,具体含义请参见“14.3.4 三种外设总线时序”的SPI帧格式。 | 0x0 |
| [6] | RW | SPO | SPICLKOUT极性,具体含义请参见“14.3.4 三种外设总线时序”的SPI帧格式。 | 0x0 |
| [5:4] | RW | FRF | 帧格式选择。 00:Motorola SPI帧格式; 01:TI同步串行帧格式; 10:National Microwire帧格式; 11:保留。 | 0x0 |
| [3:0] | RW | DSS | 设置数据位宽。 0011:4bit; 0100:5bit; 0101:6bit; 0110:7bit; 0111:8bit; 1000:9bit; 1001:10bit; 1010:11bit; 1011:12bit; 1100:13bit; 1101:14bit; 1110:15bit; 1111:16bit; 其他:保留。 | 0x0 |
SPICR1
SPICR1为控制寄存器1。
Offset Address: 0x004 Total Reset Value: 0x7F00
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15] | RW | WaitEn | 等待使能,当SPICR0寄存器的FRF配置为National Microwire帧格式时有效。 0:不使能; 1:使能。 | 0x0 |
| [14:8] | RW | WaitVal | National Microwire帧格式时,写和读之间的等待拍数。当WaitEn 为1并且帧格式为National Microwire时有效。 | 0x7F |
| [7] | - | reserved | 保留。 | 0x0 |
| [6] | RW | mode_altasens | 0:片选信号由芯片逻辑根据所选时序自动产生 1:当采用Motorola SPI帧格式时,片选CS信号由SPI使能信号控制,使能后,片选拉低,否则片选拉高。 | 0x0 |
| [5] | - | reserved | 保留。 | 0x0 |
| [4] | RW | BitEnd | 数据正反序控制位。 0:数据顺序为MSB到LSB; 1:数据顺序为LSB 到MSB。 | 0x0 |
| [3] | - | reserved | 保留。 | 0x0 |
| [2] | RW | MS | 设置Master或者Slave模式,此位只能在SPI被禁止时改变。 0:Master模式; 1:Slave模式。 | 0x0 |
| [1] | RW | SSE | 设置SPI使能。 0:不使能; 1:使能。 | 0x0 |
| [0] | RW | LBM | 设置环回模式。 0:正常的串行接口操作使能; 1:发送串行移位寄存器的输出在内部连接到接收串行移位寄存器的输入上。 | 0x0 |
SPIDR
SPIDR为数据寄存器。
Offset Address: 0x008 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
| [15:0] | RW | DATA | 发送/接收FIFO。 读:接收FIFO; 写:发送FIFO。 如果数据比特数少于16则必须右对齐。发送逻辑将忽略高位未使用的比特位,接收逻辑则自动将数据右对齐。 | 0x0000 |
SPISR
SPISR为状态寄存器。
Offset Address: 0x00C Total Reset Value: 0x0003
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:5] | - | reserved | 保留。 | 0x000 |
| [4] | RO | BSY | SPI忙标记。 0:空闲; 1:忙。 | 0x0 |
| [3] | RO | RFF | 接收FIFO是否已满。 0:未满; 1:已满。 | 0x0 |
| [2] | RO | RNE | 接收FIFO是否未空。 0:已空; 1:未空。 | 0x0 |
| [1] | RO | TNF | 发送FIFO是否未满。 0:已满; 1:未满。 | 0x1 |
| [0] | RO | TFE | 发送FIFO是否已空。 0:未空; 1:已空。 | 0x1 |
SPICPSR
SPICPSR为时钟分频寄存器。
Offset Address: 0x010 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
| [15:8] | - | reserved | 保留。 | 0x00 |
| [7:0] | RW | CPSDVSR | 时钟分频因子。此值必须是2~254之间的偶数,取决于输入时钟SPICLK的频率。最低位读作“0”。 | 0x00 |
SPIIMSC
SPIIMSC为中断屏蔽寄存器。
Offset Address: 0x014 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:4] | - | reserved | 保留。 | 0x000 |
| [3] | RW | TXIM | 发送FIFO中断屏蔽。 0:半空或更少情况下中断被屏蔽; 1:半空或更少情况下中断未被屏蔽。 | 0x0 |
| [2] | RW | RXIM | 接收FIFO中断屏蔽。 0:半空或更少情况下中断被屏蔽; 1:半空或更少情况下中断未被屏蔽。 | 0x0 |
| [1] | RW | RTIM | 接收超时中断。 0:接收超时中断屏蔽; 1:接收超时中断不屏蔽。 | 0x0 |
| [0] | RW | RORIM | 接收溢出中断屏蔽。 0:接收FIFO溢出中断屏蔽; 1:接收FIFO溢出中断不屏蔽。 值为“1”时使能硬件流控功能,即接收FIFO满后SPI停止发送数据。 | 0x0 |
SPIRIS
SPIRIS为原始中断状态寄存器。值“0”表示无中断,值“1”表示有中断。
Offset Address: 0x018 Total Reset Value: 0x0008
| Bits | Access | Name | Description | Reset |
| [15:4] | - | reserved | 保留。 | 0x000 |
| [3] | RO | TXRIS | 发送FIFO中断的原始中断状态。 | 0x1 |
| [2] | RO | RXRIS | 接收FIFO中断的原始中断状态。 | 0x0 |
| [1] | RO | RTRIS | 接收超时中断的原始中断状态。 | 0x0 |
| [0] | RO | RORRIS | 接收溢出中断的原始中断状态。 | 0x0 |
SPIMIS
SPIMIS为屏蔽后中断状态寄存器。值“0”表示无中断,值“1”表示有中断。
Offset Address: 0x01C Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:4] | - | reserved | 保留。 | 0x000 |
| [3] | RO | TXMIS | 发送FIFO中断屏蔽后的状态。 | 0x0 |
| [2] | RO | RXMIS | 接收FIFO中断屏蔽后的状态。 | 0x0 |
| [1] | RO | RTMIS | 接收超时中断屏蔽后的状态。 | 0x0 |
| [0] | RO | RORMIS | 接收溢出中断屏蔽后的状态。 | 0x0 |
SPIICR
SPIICR为中断清除寄存器。写“1”清除中断,写“0”无影响。
Offset Address: 0x020 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
| [15:2] | - | reserved | 保留。 | 0x0000 |
| [1] | WC | RTIC | 清除接收超时中断。 | 0x0 |
| [0] | WC | RORIC | 清除接收溢出中断。 | 0x0 |
SPIDMACR
SPIDMACR为DMA控制寄存器。
Offset Address: 0x024 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:2] | - | reserved | 保留位。 | 0x0000 |
| [1] | RW | TXDMAE | DMA发送FIFO使能寄存器。 0:禁止; 1:使能。 | 0x0 |
| [0] | RW | RXDMAE | DMA接收FIFO使能寄存器。 0:禁止; 1:使能。 | 0x0 |
SPITXFIFOCR
SPITXFIFOCR为发送FIFO控制寄存器。
Offset Address: 0x028 Total Reset Value: 0x0009
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:6] | - | reserved | 保留。 | 0x000 |
| [5:3] | RW | TXINTSize | 配置发送FIFO请求中断的水线。即,发送FIFO中数据数目小于或等于TXINTSize所配置的字数时,TXRIS有效。 000:1; 001:4; 010:8; 011:16; 100:32; 101:64; 110:128; 111:128。 | 0x1 |
| [2:0] | RW | DMATXBRSize | 配置发送FIFO请求DMA进行burst传输的水线。即,发送FIFO中数据数目小于或等于(256-DMATXBRSize)所配置的字数时,DMATXBREQ有效,此处字长是16位。 000:1; 001:4; 010:8; 011:16; 100:32; 101:64; 110:64; 111:64。 | 0x1 |
SPIRXFIFOCR
SPIRXFIFOCR为接收FIFO控制寄存器。
Offset Address: 0x02C Total Reset Value: 0x0009
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:6] | - | reserved | 保留。 | 0x000 |
| [5:3] | RW | RXINTSize | 配置接收FIFO请求中断的水线。即,接收FIFO中数据数目大于或等于(256-RXINTSize)所配置的字数时,RXRIS有效,此处字长是16位。 000:1; 001:4; 010:8; 011:16; 100:32; 101:64; 110:128; 111:192。 | 0x1 |
| [2:0] | RW | DMARXBRSize | 配置接收FIFO请求DMA进行burst传输的水线。即,接收FIFO中数据数目大于或等于DMARXBRSize所配置的字数时,DMARXBREQ有效。 000:1; 001:4; 010:8; 011:16; 100:32; 101:64; 110:96; 111:128。 | 0x1 |
3WIRE SPI
概述
芯片提供1个3线SPI接口。
工作方式
3线SPI内部工作于APB总线时钟。初始化步骤如下:
根据需要计算出SPI接口时钟,把配置写入寄存器SPI_3WIRE_COEF0。
例如:需要SPI接口时钟为1MHz,spi_clk_div 应该配置为(100MHz/1MHz)/2 -1 =49,所以配置spi_clk_div为0x31。
读操作步骤如下:
把读寄存器的地址写入SPI_3WIRE_COEF1 [spi_add], SPI_3WIRE_COEF1 [spi_rw]写1。
向SPI_3WIRE_COEF2 [start]写1,启动读操作。
查询SPI_3WIRE_COEF2 [spi_busy],直到该状态位为0。
从SPI_3WIRE_COEF2 [spi_rdata]读取需要的数据。
----结束
写操作步骤如下:
把写寄存器的地址和数据写入SPI_3WIRE_COEF1 [spi_add]和SPI_3WIRE_COEF1 [spi_wdata], SPI_3WIRE_COEF1 [spi_rw]写0。
向SPI_3WIRE_COEF2 [start]写1,启动写操作。
查询SPI_3WIRE_COEF2 [spi_busy],直到该状态位为0。
----结束
spi_3wire 寄存器概览
spi_3wire寄存器概览如表14-11所示。
spi_3wire寄存器概览(基地址0x0_1107_2000)
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x0000 | SPI_3WIRE_COEF0 | 3线SPI配置寄存器0 | 14-74 |
| 0x0004 | SPI_3WIRE_COEF1 | 3线SPI配置寄存器1 | 14-74 |
| 0x0008 | SPI_3WIRE_COEF2 | 3线SPI配置寄存器2 | 14-75 |
spi_3wire寄存器描述
SPI_3WIRE_COEF0
SPI_3WIRE_COEF0为3线SPI配置寄存器0。
Offset Address: 0x0000 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:8] | RO | reserved | 保留。 | 0x000000 |
| [7:0] | RW | spi_clk_div | SPI接口的时钟率。取值范围为 [1, 255]。spi_clk_div 的值用来产生SPI时钟,公式为FSPICLK=FAPBCLK/(2x(spi_clk_div+1))。其中 FAPBCLK为APB总线的时钟频率。例如,APB总线时钟为50MHz,期望 SPI的时钟为1MHz,则 spi_clk_div 应该配置为(50MHz/1MHz)/2 -1 =24。 | 0x00 |
SPI_3WIRE_COEF1
SPI_3WIRE_COEF1为3线SPI配置寄存器1。
Offset Address: 0x0004 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31] | RW | spi_rw | SPI读写操作选择。 0:写; 1:读。 | 0x0 |
| [30:16] | RW | spi_add | SPI操作地址。 | 0x0000 |
| [15:0] | RW | spi_wdata | SPI写数据。 | 0x0000 |
SPI_3WIRE_COEF2
SPI_3WIRE_COEF2为3线SPI配置寄存器2。
Offset Address: 0x0008 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:18] | RO | reserved | 保留。 | 0x00000 |
| [17] | RO | spi_busy | SPI操作状态位。 1:SPI总线上有操作; 0:SPI总线处于IDLE。 | 0x0 |
| [16] | RW | start | 启动SPI读写操作。只有spi_busy为0时才能启动,回读值为0,无意义。 | 0x0 |
| [15:0] | RO | spi_rdata | SPI回读数据。 | 0x0000 |
eMMC/SD/SDIO控制器
功能描述
功能框图
eMMC/SD/SDIO控制器(以下简称MMC)用于处理对SD卡、eMMC器件的读写等操作,并通过SDIO协议实现对扩展外设(如蓝牙、WiFi等)的支持。芯片提供3个MMC控制器。
芯片中3个MMC控制器对应的功能信号和管脚名,如下表14-12所示。
| MMC控制器 | 功能信号 | 管脚名 |
|---|---|---|
| eMMC | EMMC_DS | EMMC_DS |
| EMMC_CLK | EMMC_CLK | |
| EMMC_CMD | EMMC_CMD | |
| EMMC_DATA0 | EMMC_DATA0 | |
| EMMC_DATA1 | EMMC_DATA1 | |
| EMMC_DATA2 | EMMC_DATA2 | |
| EMMC_DATA3 | EMMC_DATA3 | |
| EMMC_DATA4 | EMMC_DATA4 | |
| EMMC_DATA5 | EMMC_DATA5 | |
| EMMC_DATA6 | EMMC_DATA6 | |
| EMMC_DATA7 | EMMC_DATA7 | |
| EMMC_RST_N | EMMC_RST_N | |
| SDIO0 | SDIO0_CCLK_OUT | SDIO0_CCLK_OUT |
| SDIO0_CARD_POWER_EN_N | SDIO0_CARD_POWER_EN_N | |
| SDIO0_CARD_DETECT | SDIO0_CARD_DETECT | |
| SDIO0_CCMD | SDIO0_CCMD | |
| SDIO0_CDATA0 | SDIO0_CDATA0 | |
| SDIO0_CDATA1 | SDIO0_CDATA1 | |
| SDIO0_CDATA2 | SDIO0_CDATA2 | |
| SDIO0_CDATA3 | SDIO0_CDATA3 | |
| DVDD3318_SDIO_VOUT | DVDD3318_SDIO_VOUT | |
| SDIO1 | SDIO1_CCLK_OUT | SDIO1_CCLK_OUT |
| SDIO1_CCMD | SDIO1_CCMD | |
| SDIO1_CDATA0 | SDIO1_CDATA0 | |
| SDIO1_CDATA1 | SDIO1_CDATA1 | |
| SDIO1_CDATA2 | SDIO1_CDATA2 | |
| SDIO1_CDATA3 | SDIO1_CDATA3 |
- eMMC支持符合以下协议的设备:
MultiMediaCard(eMMC-version 5.0)
MultiMediaCard(eMMC-version 5.1)
- SDIO0支持符合以下协议的设备:
Secure Digital Memory(SD Card 2.0)
Secure Digital Memory(SD Card3.0)
Secure Digital I/O(SDIO WIFI 2.0)
Secure Digital I/O(SDIO WIFI 3.0)
- SDIO1支持符合以下协议的设备:
Secure Digital I/O(SDIO WIFI 2.0)
Secure Digital I/O(SDIO WIFI 3.0)
MultiMediaCard(eMMC-version 4.5)
MMC的功能框图如图14-23所示。

注:S:slave接口;M:master接口。
MMC通过内部总线与系统连接,由以下单元构成:
- 命令通道
完成指令的发送与响应的接收。
- 数据通道
配合命令通道完成数据读写操作。
- 接口时钟控制单元
控制接口时钟的关闭与开启,以及接口方向时钟相位调节。
MMC的功能特点有:
- 最大可支持2TB容量的SD卡和eMMC器件。
- 支持non-DMA、SDMA、ADMA2的数据传输。
- 支持命令与数据的CRC生成与校验。
- 数据位宽支持1bit、4bit、8bit,可根据对接器件选择。
- 支持1byte~65535byte的块数据读写操作。
- SD支持Default Speed(DS)/High Speed(HS)/ SDR12/SDR25/SDR50/SDR104模式。
- eMMC支持DS/HS/HS200/HS400模式,支持boot功能。
- 支持从Boot1、Boot2或User Data分区(取决于Device)boot启动
- 支持eMMC Command Queuing(CQ)功能。
- 支持Enhanced data strobe功能。
典型应用
MMC的典型应用如图14-24所示。

指令与响应
MMC与卡设备之间的所有交互操作均通过指令完成,包括卡初始化、寄存器读写、状态查询、数据传输等。
MMC指令为48bit的串行数据,由起始位、传输位、指令序号、指令参数、CRC校验位和终止位组成。卡收到指令后,会根据指令类型返回48bit或136bit的响应。


根据是否有数据传输,指令分为以下2种:
- 非数据传输指令
基于指令信号线CMD,MMC与卡采用串行方式进行指令发送与响应接收。
- 数据传输指令
除指令线上的交互外,还有数据线DAT0~DAT3上的数据传输。
(1)非数据传输指令
MMC与卡设备之间的非数据传输指令操作如图14-27所示。

(2)数据传输指令
MMC卡支持以下数据传输指令:
- 流数据读写指令
仅MMC卡支持,只使用1根数据线(即DAT0)进行数据传输,无CRC校验。
- 单块数据读写指令
一次传输完成一个块大小的数据,不需要使用停止命令结束一次数据传输。
- 多块数据读写指令
- predefined block count方式
在多块读写指令前,发送块数量指令指定待传输的数据量。
- open ended方式
发送读写指令后,在数据传输末尾,需使用停止指令来结束一次数据传输。
SDIO设备的多块读写指令,不同于上述2种方式,在发送读写指令时,指令参数中包含待传输的数据量。
根据响应的类型,指令分为以下3种:
- 无响应指令
如卡复位指令。
- 短响应指令
数据传输指令、卡状态查询等均属于这类指令。
- 长响应指令
仅用于读取卡的寄存器CID和CSD信息。
数据传输
单块读写和多块读写为较常用的数据传输方式。通常SD卡、eMMC器件数据传输的一个块大小为512byte,而SDIO设备可根据应用自定义。
说明
以块读写指令方式进行数据传输时,传输数据总量必须为块大小的整数倍。
数据传输指令均为短响应指令,并伴随着数据线上的数据传输。指令、响应及数据线上的时序配合关系如图14-28和图14-29所示。
(1)单块与多块读操作

MMC向卡发送单块或多块读指令。在接收响应的过程中,接收以块为单位的数据,其中每块数据中均包含有CRC校验位,以保证数据传输的完整性。
单块读指令操作时,MMC在接收一块数据后完成一次数据传输;多块读指令操作时,MMC在接收多块数据后,需发送一条停止指令结束本次数据传输(仅open ended多块读指令)。
(2)单块与多块写操作

MMC往卡发送单块或多块写指令。在接收到响应后,往卡发送以块为单位的数据,其中每块数据中均包含有CRC校验位,卡会对每块数据进行CRC校验,并反馈CRC状态以确认数据传输的正确性。
单块写指令操作时,MMC在发送一块数据后完成一次数据传输;多块写指令操作时,MMC在发送多块数据后,需发送一条停止指令完成本次数据传输(仅open ended多块读指令)。写操作结束后,卡可能会因为编程Flash而处于繁忙状态,MMC需查询DAT0状态,以确认卡脱离繁忙状态后才能对卡进行下一步操作。
(3)数据传输格式
块方式读写中,MMC与卡之间可采用1bit或4bit数据线方式进行数据传输。在发送数据传输指令之前,应分别设置MMC与卡的数据传输位宽模式(1bit或4bit),使它们保持一致。MMC的数据位宽通过寄存器HOST1_PWR_BGAP_WUP_CTRL_R设置,卡的数据位宽则通过发送相应的指令进行设置。
1bit和4bit模式下的数据传输格式如图14-30和图14-31所示。


SD3.0支持的速度模式及电压切换
控制器支持SD3.0 Ultra High Speed(UHS-I),在SD-mode模式下支持电压切换,各传输模式如表14-13所示。
| 模式 | 支持的输入时钟(MHz) | 卡侧时钟 | 最大数据位宽 | 电压 |
|---|---|---|---|---|
| SDR104 | 196.58MHz | 196.5MHz | 4bit | 1.8V |
| SDR50 | 99MHz | 99MHz | 4bit | 1.8V |
| SDR25 | 49.5MHz | 49.5MHz | 4bit | 1.8V |
| SDR12 | 4.75MHz | 24.75 | 4bit | 1.8V |
| HS | 49.5MHz | 49.5MHz | 4bit | 3.3V |
| DS | 24.75MHz | 24.75MHz | 4bit | 3.3V |
eMMC支持的速度模式及电压
控制器在eMMC-mode模式下支持的各传输模式如表14-14所示。
| 模式 | 支持的输入时钟(MHz) | 卡侧时钟 | 最大数据位宽 | 电压 |
| HS400 | 196.5MHz | 196.5MHz | 8bit | 1.8V |
| HS200 | 196.5MHz | 196.5MHz | 8bit | 1.8V |
| HS_SDR | 49.5MHz | 49.5MHz | 8bit | 1.8V |
| Backwards Compatibility with legacy MMC card | 24.75MHz | 24.75MHz | 8bit | 1.8V |
SDIO3.0支持的速度模式及电压切换
控制器支持SDIO3.0 WIFI,在SDIO-mode模式下支持电压切换,各传输模式如表14-15所示。
| 模式 | 支持的输入时钟(MHz) | 卡侧时钟 | 最大数据位宽 | 电压 |
|---|---|---|---|---|
| SDR104 | 196.5MHz | 196.5MHz | 4bit | 1.8V |
| SDR50 | 99MHz | 99MHz | 4bit | 1.8V |
| SDR25 | 49.5MHz | 49.5MHz | 4bit | 1.8V |
| SDR12 | 24.75MHz | 24.75MHz | 4bit | 1.8V |
| HS | 49.5MHz | 49.5MHz | 4bit | 3.3V |
| DS | 24.75MHz | 24.75MHz | 4bit | 3.3V |
应用说明
说明
时钟复位寄存器请参考3.2.6 "CRG寄存器描述"。
软复位
在数据传输出现异常而导致MMC无法回到空闲状态时:
- CRG寄存器PERI_CRG3376 bit[16]写“1”对eMMC模块进行软复位;
- CRG寄存器PERI_CRG3440 bit[16]写“1”对SDIO0模块进行软复位;
- CRG寄存器PERI_CRG3504 bit[16]写“1”对SDIO1模块进行软复位;
建议在使用MMC之前和热插拔卡后,软复位MMC。
接口时钟配置
遵从不同协议版本的MMC卡,以及MMC卡处于不同的状态时,均使用不同的时钟频率。
- eMMC通过CRG寄存器PERI_CRG3376 bit[26:24]配置;
- SDIO0通过CRG寄存器PERI_CRG3440 bit[26:24]配置;
- SDIO1通过CRG寄存器PERI_CRG3504 bit[26:24]配置;
在改变MMC卡的时钟频率之前,必须保证没有数据或指令正在传输。为了避免输出到MMC卡的时钟产生毛刺,在改变MMC卡的时钟频率时应该遵照以下步骤:
关闭接口时钟。
将寄存器CLK_CTRL_Rbit[2]置“0”。
设置接口时钟频率。
根据不同的MMC配置对应的CRG寄存器,选择接口时钟频率。
重新使能接口时钟。
将寄存器CLK_CTRL_Rbit[2]置“1”。
----结束
MMC初始化
与卡进行命令和数据的交互前,需要初始化控制器,步骤如下:
清中断。将寄存器NORMAL_INT_STAT_R bit[15:0] 和ERROR_INT_STAT_R bit[15:0]所有位置“1”,清除原始中断状态位。
关闭中断信号使能。将寄存器NORMAL_INT_SIGNAL_EN_Rbit[15:0] 和ERROR_INT_SIGNAL_EN_R bit[15:0]所有位置“0”。
设置超时计数。配置寄存器TOUT_CTRL_R bit[3:0]。
如果为eMMC,将寄存器EMMC_CTRL_R bit[0] 置“1”,同时初始化eMMC PHY,否则置“0”。
开启power_on。将寄存器PWR_CTRL_R bit[0] 置“1”。
打开时钟。配置寄存器CLK_CTRL_R bit[3]、[2]和[0] 为“1”。
打开中断状态使能。配置寄存器NORMAL_INT_STAT_EN_R bit[15:0]和ERROR_INT_STAT_R bit[15:0]。
打开中断信号使能。配置寄存器NORMAL_INT_SIGNAL_EN_R bit[15:0]和ERROR_INT_SIGNAL_EN_R bit[15:0]。
----结束
完成以上步骤后,配置接口时钟以后,就可以往卡发送指令了。
非数据传输指令
发送非数据传输指令的步骤如下:
在寄存器ARGUMENT_R中设置相应的指令内容。
在寄存器XFER_MODE_R和CMD_R中设置相应指令参数。
等待指令被MMC执行。
检查寄存器NORMAL_INT_STAT_R bit[0]是否产生指令完成中断。
检查寄存器ERROR_INT_STAT_Rbit[15:0]是否有异常响应中断,必要时可读取响应值。
----结束
单块或多块读数据
读取单块或多块数据的步骤如下:
清除中断寄存器NORMAL_INT_STAT_R和ERROR_INT_STAT_R中的中断。
向寄存器BLOCKSIZE_R和BLOCKCOUNT_R bit[11:0]写入块的大小。
向寄存器SDMASA_R写入块的个数。
向寄存器ARGUMENT_R写入读取数据的起始地址。
配置寄存器XFER_MODE_R和CMD_R,设置数据传输参数。
对于SD卡、eMMC器件,分别使用指令CMD17/CMD18进行单块/多块读操作;对于SDIO卡,使用指令CMD53进行单块/多块读操作。
一旦寄存器CMD_R被写入,MMC就执行指令;当指令被送到总线上以后,产生cmd_done中断。
Non_DMA方式读取数据。检查寄存器NORMAL_INT_STAT_R bit[5],如果为1,则从寄存器BUF_DATA_R读取FIFO中的数据,以便MMC接收后面的数据;同时检查数据错误中断,即寄存器ERROR_INT_STAT_R bit[4]、bit[5]、bit[6]。此时,程序可以发送一个停止指令中止数据的传输。
当寄存器NORMAL_INT_STAT_R bit[1]为1时,数据传输完成,从寄存器BUF_DATA_R中读取残留在FIFO中的数据。
----结束
单块与多块写数据
写入单块或多块数据的步骤如下:
清除中断寄存器NORMAL_INT_STAT_R和ERROR_INT_STAT_R中的中断。
向寄存器BLOCKSIZE_R和BLOCKCOUNT_R bit[11:0]写入块的大小。
向寄存器SDMASA_R写入块的个数。
向寄存器ARGUMENT_R写入要写数据的起始地址。
配置寄存器XFER_MODE_R和CMD_R,设置数据传输参数。
对于SD卡、eMMC器件,分别使用指令CMD24/CMD25进行单块/多块写操作;对于SDIO卡,使用指令CMD53进行单块/多块写操作。
Non_DMA方式写数据。将数据写入FIFO,即写寄存器BUF_DATA_R。
检查寄存器NORMAL_INT_STAT_R bit[4],如果为1,则向寄存器BUF_DATA_R写入要填充到FIFO中的数据,以便MMC发送后面的数据;同时检查数据错误中断,即寄存器ERROR_INT_STAT_R bit[4]、bit[5]、bit[6]。此时,程序可以发送一个停止指令中止数据的传输。
当寄存器NORMAL_INT_STAT_R bit[1]为1时,数据传输完成。
----结束
寄存器概览
MMC寄存器概览如表14-16所示。
MMC寄存器概览(eMMC基地址是0x0_1002_0000;SDIO0基址是0x0_1003_0000;SDIO1基地址是0x0_1004_0000)
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x0000 | SDMASA_R | SDMA系统地址寄存器 | 14-91 |
| 0x0004 | BLOCKSIZE_R | BLOCK SIZE寄存器 | 14-91 |
| 0x0006 | BLOCKCOUNT_R | BLOCK CNT寄存器 | 14-92 |
| 0x0008 | ARGUMENT_R | SD/eMMC命令内容寄存器 | 14-93 |
| 0x000c | XFER_MODE_R | Transfer模式寄存器 | 14-93 |
| 0x000e | CMD_R | 命令寄存器 | 14-94 |
| 0x0010 | RESP01_R | RESP01寄存器 | 14-95 |
| 0x0014 | RESP23_R | RESP23寄存器 | 14-96 |
| 0x0018 | RESP45_R | RESP45寄存器 | 14-96 |
| 0x001c | RESP67_R | RESP67寄存器 | 14-96 |
| 0x0020 | BUF_DATA_R | Buffer数据寄存器 | 14-96 |
| 0x0024 | PSTATE_R | 当前状态寄存器 | 14-97 |
| 0x0028 | HOST_CTRL1_R | HOST控制1寄存器 | 14-98 |
| 0x0029 | PWR_CTRL_R | 上电控制寄存器 | 14-99 |
| 0x002c | CLK_CTRL_R | 时钟控制寄存器 | 14-100 |
| 0x002e | TOUT_CTRL_R | 超时控制寄存器 | 14-100 |
| 0x002f | SW_RST_R | 软复位控制寄存器 | 14-101 |
| 0x0030 | NORMAL_INT_STAT_R | 普通中断状态寄存器 | 14-101 |
| 0x0032 | ERROR_INT_STAT_R | 错误中断状态寄存器 | 14-103 |
| 0x0034 | NORMAL_INT_STAT_EN_R | 普通中断状态使能寄存器 | 14-105 |
| 0x0036 | ERROR_INT_STAT_EN_R | 错误中断状态使能寄存器 | 14-107 |
| 0x0038 | NORMAL_INT_SIGNAL_EN_R | 普通中断信号使能寄存器 | 14-109 |
| 0x003a | ERROR_INT_SIGNAL_EN_R | 错误中断信号使能寄存器 | 14-111 |
| 0x003c | AUTO_CMD_STAT_R | Auto命令状态寄存器 | 14-113 |
| 0x003e | HOST_CTRL2_R | HOST控制2寄存器 | 14-114 |
| 0x0040 | CAPABILITIES1_R | 能力1寄存器 | 14-115 |
| 0x0044 | CAPABILITIES2_R | 能力2寄存器 | 14-118 |
| 0x0054 | ADMA_ERR_STAT_R | ADMA错误状态寄存器 | 14-119 |
| 0x0058 | ADMA_SA_LOW_R | ADMA系统地址低32bit寄存器 | 14-120 |
| 0x005c | ADMA_SA_HIGH_R | ADMA系统地址高32bit寄存器 | 14-120 |
| 0x0078 | ADMA_ID_LOW_R | ADMA Intergrated 描述子地址低32bit寄存器 | 14-120 |
| 0x007c | ADMA_ID_HIGH_R | ADMA Intergrated 描述子地址高32bit寄存器 | 14-121 |
| 0x0180 | CQVER | 命令队列版本寄存器 | 14-121 |
| 0x0184 | CQCAP | 命令队列机制性能寄存器 | 14-121 |
| 0x0188 | CQCFG | 命令队列配置寄存器 | 14-122 |
| 0x018c | CQCTL | 命令队列控制寄存器 | 14-123 |
| 0x0190 | CQIS | 命令队列中断状态寄存器 | 14-123 |
| 0x0194 | CQISE | 命令队列中断状态使能寄存器 | 14-124 |
| 0x0198 | CQISGE | 命令队列中断信号使能寄存器 | 14-125 |
| 0x019c | CQIC | 命令队列中断聚合寄存器 | 14-125 |
| 0x01a0 | CQTDLBA | 命令队列任务描述子列表基地址寄存器 | 14-128 |
| 0x01a4 | CQTDLBAU | 命令队列任务描述子列表基地址高位寄存器 | 14-128 |
| 0x01a8 | CQTDBR | CommandQ DoorBell寄存器 | 14-128 |
| 0x01ac | CQTCN | CommandQ 任务完成通知寄存器 | 14-129 |
| 0x01b0 | CQDQS | 器件队列状态寄存器 | 14-129 |
| 0x01b4 | CQDPT | 器件队列等待任务寄存器 | 14-129 |
| 0x01b8 | CQTCLR | CommandQ 任务清除寄存器 | 14-129 |
| 0x01c0 | CQSSC1 | 发送状态1寄存器 | 14-130 |
| 0x01c4 | CQSSC2 | 发送状态2寄存器 | 14-130 |
| 0x01c8 | CQCRDCT | DCMD response寄存器 | 14-130 |
| 0x01d0 | CQRMEM | response错误掩码寄存器 | 14-131 |
| 0x01d4 | CQTERRI | CommandQ任务错误信息寄存器 | 14-131 |
| 0x01d8 | CQCRI | CommandQ response序号寄存器 | 14-132 |
| 0x01dc | CQCRA | CommandQ response内容寄存器 | 14-132 |
| 0x0500 | MSHC_VER_ID_R | 控制器版本ID寄存器 | 14-132 |
| 0x0504 | MSHC_VER_TYPE_R | 控制器版本类型寄存器 | 14-133 |
| 0x0510 | AXI_MBIIU_CTRL | AXI总线模块配置寄存器 | 14-133 |
| 0x052c | EMMC_CTRL_R | eMMC控制寄存器 | 14-134 |
| 0x052e | BOOT_CTRL_R | BOOT 控制寄存器 | 14-135 |
| 0x0534 | GP_OUT_R | eMMC复位和GPIO寄存器 | 14-136 |
| 0x0540 | AT_CTRL_R | Tuning控制寄存器 | 14-136 |
| 0x0544 | AT_STAT_R | Tuning状态寄存器 | 14-137 |
寄存器描述
SDMASA_R
SDMASA_R为SDMA系统地址寄存器。
Offset Address: 0x0000 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:0] | RW | blockcnt_sdmasa | 根据Host Control 2寄存器中的Host Version 4 Enable位配置32bit块计数或SDMA系统地址。 Host Version Enable=0,表示SDMA 32bit寻址模式下一次SDMA传输的系统Memory地址。 Host Version Enable=1,表示Block Count。 0xFFFF_FFFF:4G-1 Blocks ...... 0x0000_0002:2 Blocks 0x0000_0001:1 Block 0x0000_0000:Stop Count | 0x00000000 |
BLOCKSIZE_R
BLOCKSIZE_R为BLOCK SIZE寄存器。
Offset Address: 0x0004 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15] | - | reserved | 保留。 | 0x0 |
| [14:12] | RW | sdma_buf_bdary | SDMA Buffer Boundary 这些位指定系统内存中的连续缓冲区的大小。SDMA传输在每个由这些字段指定的边界处等待,并且主机控制器产生DMA中断来请求主机驱动程序更新SDMA系统地址寄存器。 0x0:4K bytes; 0x1:8K bytes; …… 0x7:512K bytes | 0x0 |
| [11:0] | RW | xfer_block_size | 传输块大小。 0x1:1 byte 0x2:2 bytes 0x3:3 bytes ...... 0x1FF:511 byte 0x200:512 bytes ...... 0x800:2048 bytes | 0x000 |
BLOCKCOUNT_R
BLOCKCOUNT_R为BLOCK COUNT寄存器。
Offset Address: 0x0006 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:0] | RW | block_cnt | 如果Host Version 4 Enable = 0或者16位块计数寄存器设置为非零,则选择16位块计数寄存器。 如果Host Version 4 Enable = 1,并且16位块计数寄存器设置为0,则选择32位块计数寄存器。 注意:当Host Version 4 Enable = 0时,在编程非DMA和ADMA模式下Auto CMD23使能时32bit块计数寄存器之前,必须将该寄存器配置为0000h。 | 0x0000 |
ARGUMENT_R
ARGUMENT_R为SD/eMMC命令内容寄存器。
Offset Address: 0x0008 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | argument | 32bit命令内容值。 | 0x00000000 |
XFER_MODE_R
XFER_MODE_R为Transfer模式命令寄存器。
Offset Address: 0x000c Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:9] | - | reserved | 保留。 | 0x00 |
| [8] | RW | resp_int_disable | response中断关闭。 0:使能; 1:关闭。 | 0x0 |
| [7] | RW | resp_err_chk_enable | response错误检查使能。 0:不使能; 1:使能。 | 0x0 |
| [6] | RW | resp_type | response R1/R5类型。 0:R1; 1:R5。 | 0x0 |
| [5] | RW | multi_blk_sel | multiple/single block选择。 0:single block; 1:multiple block。 | 0x0 |
| [4] | RW | data_xfer_dir | Data Transfer 方向。 0:控制器到卡; 1:卡到控制器。 | 0x0 |
| [3:2] | RW | auto_cmd_enable | Auto Command Enable。 00:关闭; 01:Auto CMD12 Enable; 10:Auto CMD23 Enable; 11:Auto CMD Auto Select。 (SDIO中固定为0) | 0x0 |
| [1] | RW | block_count_enable | Block count 使能。 0:关闭; 1:使能。 | 0x0 |
| [0] | RW | dma_enable | DMA 使能。 0:无数据传输或者非DMA数据传输; 1:DMA数据传输。 | 0x0 |
CMD_R
CMD_R为Transfer模式命令寄存器。
Offset Address: 0x000e Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:14] | - | reserved | 保留。 | 0x0 |
| [13:8] | RW | cmd_index | 命令编号。 | 0x00 |
| [7:6] | RW | cmd_type | 命令类型。 00:Normal命令; 01:Suspend命令; 10:Resume命令; 11:Abort命令。 | 0x0 |
| [5] | RW | data_present_sel | 当前是否为数据传输。 0:无数据传输; 1:有数据传输。 | 0x0 |
| [4] | RW | cmd_idx_chk_enable | 命令编号检查使能。 0:关闭; 1:使能。 | 0x0 |
| [3] | RW | cmd_crc_chk_enable | 命令CRC检查使能。 0:关闭; 1:使能。 | 0x0 |
| [2] | RW | sub_cmd_flag | 子命令标识。 0:Main; 1:Sub Command。 | 0x0 |
| [1:0] | RW | resp_type_select | response 类型。 00:无response; 01:response Length 136; 10:response length 48; 11:response length 48 check。 | 0x0 |
RESP01_R
RESP01_R为RESP01寄存器。
Offset Address: 0x0010 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | resp01 | RESP01寄存器。存放控制器发送命令的response bit[39:8]bits内容。 | 0x00000000 |
RESP23_R
RESP23_R为RESP23寄存器。
Offset Address: 0x0014 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | resp01 | RESP23寄存器。存放控制器发送命令的response bit[71:40]内容。 | 0x00000000 |
RESP45_R
RESP45_R为RESP45寄存器。
Offset Address: 0x0018 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | resp01 | RESP45寄存器。存放控制器发送命令的response bit[103:72]内容。 | 0x00000000 |
RESP67_R
RESP67_R为RESP67寄存器。
Offset Address: 0x001c Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | resp01 | RESP67寄存器。存放控制器发送命令的response bit[135:104]内容。 | 0x00000000 |
BUF_DATA_R
BUF_DATA_R为Buffer数据寄存器。
Offset Address: 0x0020 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | buf_data | 控制器中存放接收发送数据的Buffer,在Slave方式下通过不断写这个寄存器来写数据到卡中,通过不断读这个寄存器来获取卡中的数据。 | 0x00000000 |
PASTATE_R
PASTATE_R为当前状态寄存器。
Offset Address: 0x0024 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:28] | - | reserved | 保留。 | 0x0 |
| [27] | RO | cmd_issue_err | 命令发送出错状态。 0:发送命令无错; 1:命令不能被发送出去。 | 0x0 |
| [26:25] | - | reserved | 保留。 | 0x0 |
| [24] | RO | cmd_line_lvl | Cmd管脚状态。 0:cmd管脚为低电平; 1:cmd管脚为高电平。 | 0x0 |
| [23:20] | RO | sd_dat_in[3:0] | Data[3:0]管脚状态,每个bit含义。 0:Data管脚为低电平; 1:Data管脚为高电平。 | 0x0 |
| [19] | - | reserved | 保留。 | 0x0 |
| [18] | RO | Card_detect_pin_lvl | Card_detect_n管脚状态。 0:Card_detect_n管脚为低电平; 1:Card_detect_n管脚为高电平。 | 0x0 |
| [17:12] | - | reserved | 保留。 | 0x0 |
| [11] | RO | buf_rd_enable | Buffer读使能。 0:不使能; 1:使能。 | 0x0 |
| [10] | RO | buf_wr_enable | Buffer写使能。 0:不使能; 1:使能。 | 0x0 |
| [9] | RO | Rd_xfer_active | 读transfer有效。 0:空闲状态; 1:正在读数据。 | 0x0 |
| [8] | RO | Wr_xfer_active | 写transfer有效。 0:空闲状态; 1:正在写数据。 | 0x0 |
| [7:4] | RO | sd_dat_in[7:4] | Data[7:4]管脚状态,每个bit含义。 0:Data管脚为低电平; 1:Data管脚为高电平。 | 0x0 |
| [3] | - | reserved | 保留。 | 0x0 |
| [2] | RO | Dat_line_active | 数据线有效。 0:空闲状态; 1:正在数据传输。 | 0x0 |
| [1] | RO | cmd_inhibit_dat | 带数据的命令有效。 0:空闲状态,可以发送带数据的命令; 1:数据线正在传输或者读操作有效中。 | 0x0 |
| [0] | RO | cmd_inhibit | 数据线有效。 0:空闲状态,控制器可以发送命令; 1:忙状态,控制器不可以发送命令。 | 0x0 |
HOST_CTRL1_R
HOST_CTRL1_R为HOST控制1寄存器。
Offset Address: 0x0028 Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [7] | RW | card_detect_sig_lvl | 卡检测信号。 | 0x0 |
| [6] | RW | card_detect_test_lvl | 卡插入检测。 0:无卡; 1:有卡插入。 | 0x0 |
| [5] | RW | ext_data_xfer | 扩展数据位宽。 0:由dat_xfer_width寄存器控制; 1:8bit Bus width。 | 0x0 |
| [4:3] | RW | dma_sel | DMA 选择。 00:SDMA; 01:保留; 10:ADMA2; 11:ADMA2或者ADMA3。 | 0x0 |
| [2] | RW | high_speed_en | 高速使能。 0:Normal Speed; 1:High Speed。 | 0x0 |
| [1] | RW | dat_xfer_width | 传输数据位宽。 0:1bit; 1:4bit。 | 0x0 |
| [0] | - | reserved | 保留。 | 0x0 |
PWR_CTRL_R
PWR_CTRL_R为HOST基础配置控制寄存器。
Offset Address: 0x0029 Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [7:1] | - | reserved | 保留。 | 0x00 |
| [0] | RW | sd_bus_pwr_vdd1 | VDD2 Power使能。 0:Power off; 1:Power on。 | 0x0 |
CLK_CTRL_R
CLK_CTRL_R为时钟控制寄存器。
Offset Address: 0x002c Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:3] | - | reserved | 保留。 | 0x000 |
| [2] | RW | sd_clk_en | SD/eMMC时钟使能。 0:关闭; 1:打开。 | 0x0 |
| [1] | RO | internal_clk_statable | 内部时钟状态。 0:不稳定; 1:稳定。 | 0x0 |
| [0] | RW | internal_clk_en | 内部时钟使能。 0:不使能; 1:使能。 | 0x0 |
TOUT_CTRL_R
TOUT_CTRL_R为超时控制寄存器。
Offset Address: 0x002e Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [7:4] | - | reserved | 保留。 | 0x0 |
| [3:0] | RW | tout_cnt | 数据超时计数值。 0x0:1us x 2^13; 0xe:1us x 2^27; 其他:保留。 | 0x0 |
SW_RST_R
SW_RST_R为软复位控制寄存器。
Offset Address: 0x002f Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [7:3] | - | reserved | 保留。 | 0x00 |
| [2] | RW | sw_rst_dat | 软复位数据线请求。 0:不复位; 1:复位。 | 0x0 |
| [1] | RW | sw_rst_cmd | 软复位命令线请求。 0:不复位; 1:复位。 | 0x0 |
| [0] | RW | sw_rst_all | 软复位控制器请求。 0:不复位; 1:复位。 | 0x0 |
NORMAL_INT_STAT_R
NORMAL_INT_STAT_R为普通中断状态寄存器。
Offset Address: 0x0030 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15] | RO | err_interrupt | 汇总错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [14] | WC | cqe_event | CMD事件中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [13] | RO | fx_event | TX事件中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [12] | RO | re_tune_event | Retuning事件中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [11] | RO | int_c | INT_C中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [10] | RO | int_b | INT_B中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [9] | RO | int_a | INT_A中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [8] | RO | card_interrupt | 卡中断中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [7] | WC | card_removal | 卡移除中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [6] | WC | card_insertion | 卡插入中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [5] | WC | buf_rd_ready | Buffer读ready中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [4] | WC | buf_wr_ready | Buffer写ready中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [3] | WC | dma_interrupt | DMA中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [2] | WC | bgap_event | 因停止请求发生Block Gap事件中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [1] | WC | xfer_comlete | 读/写 transfer完成中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [0] | WC | cmd_complete | 命令完成中断状态。 0:无中断; 1:有中断。 | 0x0 |
ERROR_INT_STAT_R
ERROR_INT_STAT_R为错误中断状态寄存器。
Offset Address: 0x0032 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:13] | - | reserved | 保留。 | 0x0 |
| [12] | WC | boot_ack_err | Boot Ack错误中断,仅用于eMMC。 0:无中断; 1:有中断。 | 0x0 |
| [11] | WC | resp_err | response错误中断,仅用于SD模式。 0:无中断; 1:有中断。 | 0x0 |
| [10] | WC | tuning_err | Tuning错误中断。 0:无中断; 1:有中断。 | 0x0 |
| [9] | WC | adma_err | ADMA错误中断,系统总线错误response,或者ADMA2/3描述子无效,或者CQE描述子无效。 0:无中断; 1:有中断。 | 0x0 |
| [8] | WC | auto_cmd_err | Auto CMD错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [7] | WC | cur_lmt_err | Current limit错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [6] | WC | data_end_bit_err | 数据endbit错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [5] | WC | data_crc_err | 数据CRC错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [4] | WC | data_tout_err | 数据超时错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [3] | WC | cmd_idx_err | 命令Index错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [2] | WC | cmd_end_bit_err | 命令endbit错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [1] | WC | cmd_crc_err | 命令CRC错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [0] | WC | cmd_tout_err | 命令超时错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
NORMAL_INT_STAT_EN_R
NORMAL_INT_STAT_EN_R为普通中断状态使能寄存器。
Offset Address: 0x0034 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15] | - | reserved | 保留。 | 0x0 |
| [14] | RW | cqe_event_stat_en | CMD事件中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [13] | RW | fx_event_stat_en | TX事件中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [12] | RW | re_tune_event_stat_en | Retuning事件中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [11] | RW | int_c_stat_en | INT_C中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [10] | RW | int_b_stat_en | INT_B中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [9] | RW | int_a_stat_en | INT_A中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [8] | RW | card_interrupt_stat_en | 卡中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [7] | RW | card_removal_stat_en | 卡移除中断使能。 0:不使能; 1:使能。 | 0x0 |
| [6] | RW | card_insertion_stat_en | 卡插入中断使能。 0:不使能; 1:使能。 | 0x0 |
| [5] | RW | buf_rd_ready_stat_en | Buffer读ready中断使能。 0:不使能; 1:使能。 | 0x0 |
| [4] | RW | buf_wr_ready_stat_en | Buffer写ready中断使能。 0:不使能; 1:使能。 | 0x0 |
| [3] | RW | dma_interrupt_stat_en | DMA中断使能。 0:不使能; 1:使能。 | 0x0 |
| [2] | RW | bgap_event_stat_en | 因停止请求发生Block Gap事件中断使能。 0:不使能; 1:使能。 | 0x0 |
| [1] | RW | xfer_comlete_stat_en | 读/写 transfer完成中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [0] | RW | cmd_complete_stat_en | 命令完成中断状态使能。 0:不使能; 1:使能。 | 0x0 |
ERROR_INT_STAT_EN_R
ERROR_INT_STAT_EN_R为错误中断状态使能寄存器。
Offset Address: 0x0036 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:13] | - | reserved | 保留。 | 0x0 |
| [12] | RW | boot_ack_err_stat_en | Boot Ack错误中断状态使能,仅用于eMMC。 0:不使能; 1:使能。 | 0x0 |
| [11] | RW | resp_err_stat_en | response错误中断状态使能,仅用于SD模式。 0:不使能; 1:使能。 | 0x0 |
| [10] | RW | tuning_err_stat_en | Tuning错误中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [9] | RW | adma_err_stat_en | ADMA错误中断状态使能。 系统总线错误response,或者ADMA2/3描述子无效,或者CQE描述子无效 0:不使能; 1:使能。 | 0x0 |
| [8] | RW | auto_cmd_err_stat_en | Auto CMD错误中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [7] | RW | cur_lmt_err_stat_en | Current limit错误中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [6] | RW | data_end_bit_err_stat_en | 数据endbit错误中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [5] | RW | data_crc_err_stat_en | 数据CRC错误中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [4] | RW | data_tout_err_stat_en | 数据超时错误中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [3] | RW | cmd_idx_err_stat_en | 命令Index错误中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [2] | RW | cmd_end_bit_err_stat_en | 命令endbit错误中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [1] | RW | cmd_crc_err_stat_en | 命令CRC错误中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [0] | RW | cmd_tout_err_stat_en | 命令超时错误中断状态使能。 0:不使能; 1:使能。 | 0x0 |
NORMAL_INT_SIGNAL_EN_R
NORMAL_INT_SIGNAL_EN_R为普通中断信号使能寄存器。
Offset Address: 0x0038 Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15] | - | reserved | 保留 | 0x0 |
| [14] | RW | cqe_event_signal_en | CMD事件中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [13] | RW | fx_event_signal_en | TX事件中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [12] | RW | re_tune_event_signal_en | Retuning事件中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [11] | RW | int_c_signal_en | INT_C中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [10] | RW | int_b_signal_en | INT_B中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [9] | RW | int_a_signal_en | INT_A中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [8] | RW | card_interrupt_signal_en | 卡中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [7] | RW | card_removal_signal_en | 卡移除中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [6] | RW | card_insertion_signal_en | 卡插入中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [5] | RW | buf_rd_ready_signal_en | Buffer读ready信号使能。 0:不使能; 1:使能。 | 0x0 |
| [4] | RW | buf_wr_ready_signal_en | Buffer写ready信号使能。 0:不使能; 1:使能。 | 0x0 |
| [3] | RW | dma_interrupt_signal_en | DMA中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [2] | RW | bgap_event_signal_en | 因停止请求发生Block Gap事件中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [1] | RW | xfer_comlete_signal_en | 读/写 transfer完成中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [0] | RW | cmd_complete_signal_en | 命令完成中断信号使能。 0:不使能; 1:使能。 | 0x0 |
ERROR_INT_SIGNAL_EN_R
ERROR_INT_SIGNAL_EN_R为错误中断信号使能寄存器。
Offset Address: 0x003a Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:13] | RW | reseverd | 保留。 | 0x0 |
| [12] | RW | boot_ack_err_signal_en | Boot Ack错误中断信号使能,仅用于eMMC。 0:不使能; 1:使能。 | 0x0 |
| [11] | RW | resp_err_signal_en | response错误中断信号使能,仅用于SD模式。 0:不使能; 1:使能。 | 0x0 |
| [10] | RW | tuning_err_signal_en | Tuning错误中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [9] | RW | adma_err_signal_en | ADMA错误中断信号使能,系统总线错误response,或者ADMA2/3描述子无效,或者CQE描述子无效 0:不使能; 1:使能。 | 0x0 |
| [8] | RW | auto_cmd_err_signal_en | Auto CMD错误中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [7] | RW | cur_lmt_err_signal_en | Current limit错误中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [6] | RW | data_end_bit_err_signal_en | 数据endbit错误中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [5] | RW | data_crc_err_signal_en | 数据CRC错误中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [4] | RW | data_tout_err_signal_en | 数据超时错误中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [3] | RW | cmd_idx_err_signal_en | 命令Index错误中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [2] | RW | cmd_end_bit_err_signal_en | 命令endbit错误中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [1] | RW | cmd_crc_err_signal_en | 命令CRC错误中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [0] | RW | cmd_tout_err_signal_en | 命令超时错误中断信号使能。 0:不使能; 1:使能。 | 0x0 |
AUTO_CMD_STAT_R
AUTO_CMD_STAT_R为Auto命令状态寄存器。
Offset Address: 0x003c Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:8] | - | reserved | 保留。 | 0x00 |
| [7] | RO | cmd_not_issued_auto_cmd12 | 有Auto CMD12错误时发送后续命令状态。 0:无错误; 1:还没有通过数据线发送CMD。 | 0x0 |
| [6] | - | reserved | 保留。 | 0x0 |
| [5] | RO | auto_cmd_resp_err | Auto CMD response状态。 0:无错; 1:错。 | 0x0 |
| [4] | RO | auto_cmd_idx_err | Auto CMD Index状态。 0:无错; 1:错。 | 0x0 |
| [3] | RO | auto_cmd_endbit_err | Auto CMD Endbit状态。 0:无错; 1:错。 | 0x0 |
| [2] | RO | auto_cmd_crc_err | Auto CMD CRC状态。 0:无错; 1:错。 | 0x0 |
| [1] | RO | auto_cmd_tout_err | Auto CMD 超时状态。 0:无错; 1:错。 | 0x0 |
| [0] | RO | auto_cmd12_not_exec | Auto CMD12 执行状态。 0:执行; 1:没有执行。 | 0x0 |
HOST_CTRL2_R
HOST_CTRL2_R为控制器2寄存器。
Offset Address: 0x003e Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15] | RW | preset_val_enable | 预设值自动选择使能。 0:不使能,SDCLK和驱动能力由驱动控制; 1:使能。 | 0x0 |
| [14] | RW | async_int_enable | 异步中断使能。 0:关闭; 1:打开。 | 0x0 |
| [13] | RW | addressing | 总线64bit地址使能。 0:不使能,使用32bit地址; 1:使能,使用64bit地址。 | 0x0 |
| [12] | RW | host_ver4_enable | 控制器版本4使能。 0:3.0版本; 1:4.0版本。 | 0x0 |
| [11] | RW | cmd23_enable | CMD23使能。 0:Auto CMD23关闭; 1:Auto CMD23使能。 | 0x0 |
| [10] | RW | adma2_len_mode | ADMA2长度。 0:16bit数据长度; 1:26bit数据长度。 | 0x0 |
| [9:8] | - | reserved | 保留。 | 0x0 |
| [7] | RW | sample_clk_sel | sample时钟选择。 0:选择fixed时钟采数据; 1:选tuned时钟采数据。 | 0x0 |
| [6] | RW | exec_tuning | 执行tuning,完成后自动清0。 0:没做tuning或者tuning完成; 1:执行tuning。 | 0x0 |
| [5:4] | - | reserved | 保留。 | 0x0 |
| [3] | RW | signaling_en | 信号电平选择。 0:3.3V信号; 1:1.8V信号(SDR模式必须置1)。 | 0x0 |
| [2:0] | RW | uhs_mode_sel | UHS模式: 000:SDR12; 001:SDR25; 010:SDR50; 011:SDR104; 100—111:保留。 eMM模式: 000:Legacy; 001:High Speed SDR; 010:保留; 011:HS200; 100—110:保留; 111:HS400。 | 0x0 |
CAPABILITIES1_R
CAPABILITIES1_R为能力1寄存器。
Offset Address: 0x0040 Total Reset Value: 0x3F6E_0181
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:30] | RO | slot_type_r | Slot类型。 00:可移除卡Slot; 01:Embedded Slot; 10:共享总线Slot(SD模式下使用); 11:保留。 | 0x0 |
| [29] | RO | async_int_support | 同步中断是否支持。 0:不支持; 1:支持。 | 0x1 |
| [28] | RO | sys_addr_64_v3 | 64bit系统地址用于V3版本。 0:不支持; 1:支持。 | 0x1 |
| [27] | RO | sys_addr_64_v4 | 64bit系统地址用于V4版本。 0:不支持; 1:支持。 | 0x1 |
| [26] | RO | volt_18 | 电压支持1.8V。 0:不支持; 1:支持。 | 0x1 |
| [25] | RO | volt_30 | 电压支持3.0V。 0:不支持; 1:支持。 | 0x1 |
| [24] | RO | volt_33 | 电压支持3.3V。 0:不支持; 1:支持。 | 0x1 |
| [23] | RO | sus_res_support | 暂停、恢复支持。 0:不支持; 1:支持。 | 0x0 |
| [22] | RO | sdma_support | SDMA支持。 0:不支持; 1:支持。 | 0x1 |
| [21] | RO | high_speed_support | 是否支持High Speed。 0:不支持; 1:支持。 | 0x1 |
| [20] | - | reserved | 保留。 | 0x0 |
| [19] | RO | adma2_support | 是否支持ADMA2。 0:不支持; 1:支持。 | 0x1 |
| [18] | RO | embedded_8_bit | 是否支持Embedded器件8bit。 0:不支持; 1:支持。 | 0x1 |
| [17:16] | RO | max_blk_len | 最大block 长度。 0x0:512Byte; 0x1:1024Byte; 0x2:2048Byte; 0x3:保留。 | 0x2 |
| [15:8] | RO | base_clk_freq | SD时钟基础频率。 0x0:1MHz; 0x3f:63MHz; 0x40~0xff:不支持。 | 0x01 |
| [7] | RO | tout_clk_unit | 超时时钟单位。 0:KHz; 1:MHz。 | 0x1 |
| [6] | - | reserved | 保留。 | 0x0 |
| [5:0] | RO | tout_clk_freq | 超时频率。 0x1:1KHz/1MHz; 0x2:2KHz/2MHz; …… 0x3f:63KHz/63MHz。 | 0x01 |
CAPABILITIES2_R
CAPABILITIES2_R为能力2寄存器。
Offset Address: 0x0044 Total Reset Value: 0x0800_2077
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:29] | - | reserved | 保留。 | 0x0 |
| [28] | RO | vdd2_18v_support | 是否支持1.8V VDDR。 0:不支持; 1:支持。 | 0x0 |
| [27] | RO | adma3_support | 是否支持ADMA3。 0:不支持; 1:支持。 | 0x1 |
| [26:16] | - | reserved | 保留。 | 0x000 |
| [15:14] | RO | re_tuning_modes | retuning模式。 00:MODE1,Timer; 01:MODE2,Timer和ReTuning请求; 10:MODE3,Auto retuning Timer和Retuning请求; 11:保留。 | 0x0 |
| [13] | RO | use_tuning_ser50 | SDR50使用Tuning。 0:不使用; 1:使用。 | 0x1 |
| [12] | - | reserved | 保留。 | 0x0 |
| [11:8] | RO | retune_cnt | Retuning计数。 0x1:1秒; 0x3:4秒; 其他:保留。 | 0x0 |
| [7] | - | reserved | 保留。 | 0x0 |
| [6] | RO | drv_typed | 是否支持TYPED。 0:不支持; 1:支持。 | 0x1 |
| [5] | RO | drv_typec | 是否支持TYPEC。 0:不支持; 1:支持。 | 0x1 |
| [4] | RO | drv_typea | 是否支持TYPEA。 0:不支持; 1:支持。 | 0x1 |
| [3] | RO | uhs2_support | 是否支持UHS2。 0:不支持; 1:支持。 | 0x0 |
| [2] | RO | ddr50_support | 是否支持DDR50。 0:不支持; 1:支持。 | 0x1 |
| [1] | RO | sdr104_support | 是否支持SDR104。 0:不支持; 1:支持。 | 0x1 |
| [0] | RO | sdr50_support | 是否支持SDR50。 0:不支持; 1:支持。 | 0x1 |
ADMA_ERR_STAT_R
ADMA_ERR_STAT_R为ADMA错误状态寄存器。
Offset Address: 0x0054 Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
| [7:3] | - | reserved | 保留。 | 0x00 |
| [2] | RO | adma_len_err | ADMA长度不匹配错误状态。 0:无错; 1:有错。 | 0x0 |
| [1:0] | RO | adma_err_states | ADMA错误状态。 00:ST_STOP; 01:ST_FDS; 10:ST_UNUSED; 11:ST_TFR。 | 0x0 |
ADMA_SA_LOW_R
ADMA_SA_LOW_R为ADMA系统地址低32bit寄存器。
Offset Address: 0x0058 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | adma_sa_low | ADMA系统地址低32bit。 | 0x00000000 |
ADMA_SA_HIGH_R
ADMA_SA_HIGH_R为ADMA系统地址高32bit寄存器。
Offset Address: 0x005c Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | adma_sa_high | ADMA系统地址高32bit。 | 0x00000000 |
ADMA_ID_LOW_R
ADMA_ID_LOW_R为ADMA Intergrated 描述子地址低32bit寄存器。
Offset Address: 0x0078 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | adma_id_low | ADMA Intergrated 描述子地址低32bit。 | 0x00000000 |
ADMA_ID_HIGH_R
ADMA_ID_HIGH_R为ADMA Intergrated 描述子地址高32bit寄存器。
Offset Address: 0x007c Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | adma_id_high | ADMA Intergrated 描述子地址高32bit。 | 0x00000000 |
CQVER
CQVER为命令队列版本寄存器。
Offset Address: 0x0180 Total Reset Value: 0x0000_0510
| Bits | Access | Name | Description | Reset |
| [31:12] | RO | emmc_ver_rsvd | 保留。 | 0x00000 |
| [11:8] | RO | emmc_ver_major | eMMC主版本(小数点左边的第一个数字),BCD格式。 | 0x5 |
| [7:4] | RO | emmc_ver_minor | eMMC次版本(小数点右边的第一个数字),BCD格式。 | 0x1 |
| [3:0] | RO | emmc_ver_suffix | eMMC版本后缀(小数点右边的第二个数字),BCD格式。 | 0x0 |
CQCAP
CQCAP为命令队列机制性能寄存器。
Offset Address: 0x0184 Total Reset Value: 0x0000_30C8
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:16] | RO | cqccap_rsvd2 | 保留。 | 0x0000 |
| [15:12] | RO | itcfmul | CommandQ中断聚合计数器单位值。 000:1KHz; 001:10KHz; 010:100KHz; 011:1MHz; 100:10MHz; 其他:保留。 | 0x3 |
| [11:0] | RO | cqccap_rsvd1 | 保留。 | 0x0C8 |
CQCFG
CQCFG为命令队列配置寄存器。
Offset Address: 0x0188 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:13] | RO | cqccfg_rsvd3 | 保留。 | 0x00000 |
| [12] | RW | dcmd_en | 指示TDL中的slot31任务描述子是数据传输描述子还是DCMD描述子。 0:是数据传输任务描述子; 1:是DCMD任务描述子。 | 0x0 |
| [11:9] | RO | cqccfg_rsvd2 | 保留。 | 0x0 |
| [8] | RW | task_desc_size | 内存中任务描述子大小。此bit只能在命令队列使能关闭情况下才能配置。 0:64bits; 1:128bits。 | 0x0 |
| [7:1] | RO | cqccfg_rsvd1 | 保留。 | 0x00 |
| [0] | RW | cq_en | CQE使能。 0:关闭; 1:使能。 | 0x0 |
CQCTL
CQCTL为命令队列控制寄存器。
Offset Address: 0x018c Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:9] | RO | cqctl_rsvd2 | 保留。 | 0x000000 |
| [8] | RW | clr_all_tasks | 清除所有任务。只有当控制器暂停情况下 才可以配置该bit。软件可以通过CMDQ_TASK_MGMT命令清除device中的队列。 0:无影响; 1:清除控制器中所有任务。 | 0x0 |
| [7:1] | RO | cqctl_rsvd1 | 保留。 | 0x00 |
| [0] | RW | halt | 暂停状态。 0:退出Halt状态,恢复CQE活动; 1:通过eMMC总线获取软件控制并且关闭CQE在总线上处理命令。 | 0x0 |
CQIS
CQIS为命令队列中断状态寄存器。
Offset Address: 0x0190 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:4] | RO | cqis_rsvd1 | 保留。 | 0x0000000 |
| [3] | WC | tcl | 任务清除中断。当任务清除操作完成之后,bit为1。完成操作可以是一个单独的任务完成清除(CQTCLR)或者是清除所有任务(通过写CQCTL)。 | 0x0 |
| [2] | WC | red | response错误检测中断。当收到device状态域错误response,bit为1。配置CQRMEM寄存器去识别device状态位,可以触发被mask掉的中断 | 0x0 |
| [1] | WC | tcc | 任务完成中断。至少满足下列一个条件: 任务完成并且任务描述子设置了INT bit; 中断聚合逻辑由于超时产生的中断; 中断聚合逻辑达到了配置的阈值。 | 0x0 |
| [0] | WC | hac | 暂停完成中断。 当CQCTL寄存器中的halt位从0变到1证明控制器已经完成了当前的任务,并进入Halt状态,该bit为1。 | 0x0 |
CQISE
CQISE为命令队列中断状态使能寄存器。
Offset Address: 0x0194 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:4] | RO | cqise_rsvd1 | 保留 | 0x0000000 |
| [3] | RW | tcl_ste | 任务清除中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [2] | RW | red_ste | response错误检测中断状态使能。 0:不使能; 1:使能。 | 0x0 |
| [1] | RW | tcc_ste | 任务完成中断使能。 0:不使能; 1:使能。 | 0x0 |
| [0] | RW | hac_ste | Halt完成中断状态使能。 0:不使能; 1:使能。 | 0x0 |
CQISGE
CQISGE为命令队列中断信号使能寄存器。
Offset Address: 0x0198 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:4] | RW | cqisge_rsvd1 | 保留。 | 0x0000000 |
| [3] | RW | tcl_sge | 任务清除中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [2] | RW | red_sge | response错误检测中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [1] | RW | tcc_sge | 任务完成中断信号使能。 0:不使能; 1:使能。 | 0x0 |
| [0] | RW | hac_sge | Halt完成中断信号使能。 0:不使能; 1:使能。 | 0x0 |
CQIC
CQIC为命令队列中断聚合寄存器。
Offset Address: 0x019c Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31] | RW | intc_en | 中断聚合使能位。 0:中断聚合机制关闭; 1:中断聚合机制开启。中断被计数并且计时。聚合中断产生。 | 0x0 |
| [30:21] | RO | cqic_rsvd3 | 保留 | 0x000 |
| [20] | RW | intc_stat | 中断聚合状态位,告知软件是否有任务(INT=0)完成,并且计数到中断聚合。(只有当INTC计数器>0置位) 0:从最后一个计数器复位,任务还没有完成(INTC counter==0); 1:至少一个任务完成被计数(INTC计数器>0)。 | 0x0 |
| [19:17] | RO | cqic_rsvd2 | 保留。 | 0x0 |
| [16] | WO | intc_rst | 计数器和计时器复位。 0:无影响; 1:中断聚合超时和多包计数被复位。 | 0x0 |
| [15] | WO | intc_th_wen | intc_th值更新使能。 0:不使能; 1:使能。 | 0x0 |
| [14:13] | RO | cqic_rsvd1 | 保留。 | 0x0 |
| [12:8] | RW | intc_th | 中断聚合计数器阈值域。配置任务完成的数目(只能是任务描述子中INT=0的任务),用来计数生成中断。计数器操作:当数据传输任务(INT=0)完成,这些任务就会被CQE计数。计数器在中断服务程序过程中被复位。当达到INTC_TH中配置的值,计数器停止计数并生成中断。 0x0:中断聚合特性关闭。 0x1:1个task(INT=0)完成之后中断聚合中断生成 0x2:2个task(INT=0)完成之后中断聚合中断生成 0x3:3个task(INT=0)完成之后中断聚合中断生成 …… 0x31:31个task(INT=0)完成之后中断聚合中断生成 为了写这一片区域,INTC_TH_WEN位在同一个写操作中一定要配置 | 0x00 |
| [7] | RW | tout_val_wen | tout_val值更新使能。 0:不使能; 1:使能。 | 0x0 |
| [6:0] | RW | tout_val | 中断聚合超时值。配置一个任务完成到产生中断的最大的时间。 计时器操作:计时器在中断服务程序过程中被复位。计时器复位后,当第一个数据传输任务(INT=0)完成开始工作。当计时器达到ICTOVAL域的值,生成中断并停止计时。 计时器的单位是1024个时钟周期,周期是CQCAP寄存器中的内部计时器时钟频率域的周期。 0x0:计时器关闭。基于超时的中断不会生成。 0x1:01x1024个计时器时钟频率的周期后超时 0x2:01x1024个计时器时钟频率的周期后超时 …… 0x7f:127x1024个计时器时钟频率的周期后超时 为了写这个域,TOUT_VAL_WEN位在同一个写操作中一定要配置 | 0x00 |
CQTDLBA
CQTDLBA为命令队列任务描述子列表基地址寄存器。
Offset Address: 0x01a0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | tdlba | 储存系统存储中任务队列描述子的起始地址[31:0]。以字节为单位。 | 0x00000000 |
CQTDLBAU
CQTDLBAU为命令队列任务描述子列表基地址高位寄存器。
Offset Address: 0x01a4 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | tdlbau | 储存系统存储中任务队列描述子的起始地址[63:32],以字节为单位。 任务描述子列表的大小是32*(任务描述子大小+传输描述子大小),通过控制器驱动配置。地址要设置成1KB边界。寄存器的低10bits要配成0.并且在CQE中被忽略。使用32-bit地址模式,这个寄存器为保留。 | 0x00000000 |
CQTDBR
CQTDBR为CommandQ DoorBell寄存器。
Offset Address: 0x01a8 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dbr | DBR寄存器,每个bit对应一个slot。 | 0x00000000 |
CQTCN
CQTCN为CommandQ 任务完成通知寄存器。
Offset Address: 0x01ac Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | WC | tcn | Task 完成通告寄存器,每个bit对应一个slot。 | 0x00000000 |
CQDQS
CQDQS为器件队列状态寄存器。
Offset Address: 0x01b0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | dqs | 器件上队列状态寄存器,每个bit对应一个任务。 | 0x00000000 |
CQDPT
CQDPT为器件队列等待任务寄存器。
Offset Address: 0x01b4 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | dpt | 器件上队列pending寄存器,每个bit对应一个任务。 | 0x00000000 |
CQTCLR
CQTCLR为CommandQ 任务清除寄存器。
Offset Address: 0x01b8 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | cqtclr | CommandQ 任务寄存器,每个bit对应一个任务。 | 0x00000000 |
CQSSC1
CQSSC1为发送状态1寄存器。
Offset Address: 0x01c0 Total Reset Value: 0x0000_1000
| Bits | Access | Name | Description | Reset |
| [31:20] | - | reserved | 保留。 | 0x000 |
| [19:16] | RW | sqscmd_blk_cnt | 是否应在数据发送过程中发送SQS CMD。 0:不发送,SQS CMD仅在数据线是idle的时候发送; 1:发送,SQS CMD可以在数据最后一个block时候发送。 | 0x0 |
| [15:0] | RW | sqscmd_idle_tmr | 配置轮询周期来发送CMD13。 | 0x1000 |
CQSSC2
CQSSC2为发送状态2寄存器。
Offset Address: 0x01c4 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | - | reserved | 保留 | 0x0000 |
| [15:0] | RW | sqscmd_rca | CMD13需要的16bit RCA。 | 0x0000 |
CQCRDCT
CQCRDCT为DCMD response寄存器。
Offset Address: 0x01c8 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | dcmd_resp | DMCD response内容寄存器。 | 0x00000000 |
CQRMEM
CQRMEM为response错误掩码寄存器。
Offset Address: 0x01d0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | resp_err_mask | 控制response错误检测中断的产生,掩码寄存器。 0:不能产生RED中断,被屏蔽; 1:可以产生RED中断。 | 0x00000000 |
CQTERRI
CQTERRI为CommandQ任务错误信息寄存器。
Offset Address: 0x01d4 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31] | RO | trans_err_fields_valid | 发送命令错误状态。 0:无错误; 1:有相关错误,请参见trans_err_taskid和trans_err_cmd_index内容。 | 0x0 |
| [30:29] | - | reserved | 保留。 | 0x0 |
| [28:24] | RO | trans_err_taskid | 传输报错的TASKID。 | 0x00 |
| [23:22] | - | reserved | 保留。 | 0x0 |
| [21:16] | RO | trans_err_cmd_index | 传输报错的命令的index。 | 0x00 |
| [15] | RO | resp_err_fields_valid | 命令response错误状态。 0:无错误; 1:有response相关错误,请检查resp_err_taskid和resp_err_cmd_index内容。 | 0x0 |
| [14:13] | - | reserved | 保留。 | 0x0 |
| [12:8] | RO | resp_err_taskid | response报错的TASKID。 | 0x00 |
| [7:6] | - | reserved | 保留。 | 0x0 |
| [5:0] | RO | resp_err_cmd_indx | response报错的命令的index。 | 0x00 |
CQCRI
CQCRI为CommandQ response序号寄存器。
Offset Address: 0x01d8 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:6] | - | reserved | 保留 | 0x0000000 |
| [5:0] | RO | cmd_resp_indx | 最后一个命令response的序号。 | 0x00 |
CQCRA
CQCRA为CommandQ response内容寄存器。
Offset Address: 0x01dc Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | cmd_resp_arg | 最后一个命令response的内容。 | 0x00000000 |
MSHC_VER_ID_R
MSHC_VER_ID_R为控制器版本ID寄存器。
Offset Address: 0x0500 Total Reset Value: 0x3137_302A
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | mshc_ver_id | 控制器版本ID寄存器。 | 0x3137302A |
MSHC_VER_TYPE_R
MSHC_VER_TYPE_R为控制器版本类型寄存器。
Offset Address: 0x0504 Total Reset Value: 0x6761_2A2A
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | mshc_ver_id | 控制器版本类型寄存器。 | 0x67612A2A |
AXI_MBIU_CTRL
AXI_MBIU_CTRL为AXI总线模块配置寄存器。
Offset Address: 0x0510 Total Reset Value: 0x0707_000F
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:27] | - | reserved | 保留。 | 0x00 |
| [26:24] | RW | gm_write_osrc_lmt | 写总线操作outstanding值。 等于此寄存器值加1。 | 0x7 |
| [23:19] | - | reserved | 保留。 | 0x00 |
| [18:16] | RW | gm_read_osrc_lmt | 读总线操作outstanding值。 等于此寄存器值加1。 | 0x7 |
| [15:10] | - | reserved | 保留。 | 0x00 |
| [9] | RW | gm_onerequestonly | outstanding配置生效使能。 0:outstanding按gm_write_osrc_lmt /read_osrc_lmt生效; 1:outstanding固定为1。 | 0x0 |
| [8] | RW | gm_axi_1k_en | AXI总线跨1K边界读写功能使能。 0:不使能; 1:使能; | 0x0 |
| [7:4] | - | reserved | 保留。 | 0x0 |
| [3] | RW | gm_enburst16 | 16burst使能。 0:关闭16burst; 1;使能16burst; | 0x1 |
| [2] | RW | gm_enburst8 | 8burst使能。 0:关闭8burst; 1;打开8burst; | 0x1 |
| [1] | RW | gm_enburst4 | 4burst使能。 0:关闭4burst; 1;打开4burst; | 0x1 |
| [0] | RW | gm_enburst_undef | burst配置生效使能。 0:按下面三种配置gm_enburst4/8/16产生固定burst; 1:按实际数据长度产生对应burst; | 0x1 |
EMMC_CTRL_R
EMMC_CTRL_R为eMMC控制寄存器。
Offset Address: 0x052c Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:11] | - | reserved | 保留 | 0x0 |
| [10] | RW | cqe_prefetch_disable | 关闭CommandQ预取功能使能。 0:数据预取使能; 1:数据预取关闭。 | 0x0 |
| [9] | RW | cqe_algo_sel | 任务排列算法选择。 0:高优先级的任务先执行,同等优先级的按先来先执行; 1:先来先执行。 | 0x0 |
| [8] | RW | enh_strobe_enable | Enhanced Strobe使能。 此寄存器域指示在HS400模式下控制器使用data Strobe来采集CMD线。 0:HS400模式下,用cclk_rx采样CMD线; 1:HS400模式下,用data strobe采样CMD线。 | 0x0 |
| [7:2] | - | reserved | 保留。 | 0x0 |
| [1] | RW | disable_data_crc_chk | 关闭数据CRC检查。 0:数据CRC检查使能; 1:数据CRC检查关闭。 | 0x00 |
| [0] | RW | card_is_emmc | 连接的卡类型。 0:非emmc卡; 1:emmc卡。 | 0x0 |
BOOT_CTRL_R
BOOT_CTRL_R为BOOT控制寄存器。
Offset Address: 0x052e Total Reset Value: 0x0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [15:12] | RW | boot_tout_cnt | boot ack超时计数。 0x0: 1us x 2^13; 0x1: 1us x 2^14; …… 0xE: 1us x 2^27; 其他:保留。 | 0x00 |
| [11:9] | - | reserved | 保留。 | 0x0 |
| [8] | RW | boot_ack_enable | boot ack使能。 0:关闭; 1:使能。 | 0x0 |
| [7] | WO | validate_boot | 强制boot有效使能。 0:无影响; 1:boot使能有效。 | 0x0 |
| [6:1] | - | reserved | 保留。 | 0x00 |
| [0] | RW | man_boot_en | 强制boot使能,要和validate_boot一起配置,boot传输完成后,这个bit会自清 0:无影响; 1:boot使能有效。 | 0x0 |
GP_OUT_R
GP_OUT_R为eMMC复位和GPIO寄存器。
Offset Address: 0x0534 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:1] | - | reserved | 保留。 | 0x000000 |
| [0] | RW | emmc_rst_n | eMMC卡复位信号。 0:复位; 1:不复位。 | 0x0 |
AT_CTRL_R
AT_CTRL_R为tuning控制寄存器。
Offset Address: 0x0540 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:5] | - | reserved | 保留。 | 0x000000 |
| [4] | RW | sw_tuning_en | 软件配置SAMPLE相位调整使能 0:不能使 1:使能 | 0x00 |
| [3:0] | - | reserved | 保留。 | 0x0 |
AT_STAT_R
AT_STAT_R为tuning状态寄存器。
Offset Address: 0x0544 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:8] | - | reserved | 保留。 | 0x000000 |
| [7:0] | RW | sw_ph_sel_code | 软件配置SAMPLE相位选择。 0:0 x 0° 4:1 x 45° 8:2 x 45° 12:3 x 45° …… 28:7 x 45° 注意:100M以下取用以上配置值,100M软件算法计算。 | 0x0 |
红外接口
概述
红外遥控接收单元IR(Infrared Remoter)通过红外接口接收红外数据。
特点
IR模块具有以下特点:
- 软件可配置关闭红外遥控接收模块。
- 支持2种工作模式:
- 模式0:支持NEC with simple repeat code、NEC with full repeat code、SONY和TC9012四种数据格式解码,及接收数据错误检测和红外遥控唤醒等功能。
- 模式1:支持任意数据格式的symbol电平宽度检测。
- 模式0时,支持接收数据帧溢出中断、接收数据帧格式错误中断、接收数据帧中断、按键释放的中断、各种中断构成的组合中断。
- 模式1时,支持接收symbol溢出中断、接收到symbol中断、symbol超时中断、各种中断构成的组合中断。
- 支持初始中断状态查询和屏蔽后中断状态查询。
- 支持中断清除和屏蔽(写清)。
- 支持红外遥控唤醒。
- 支持参考时钟频率1MHz~128MHz可选,软件可编程控制分频因子使工作时钟预分频到1MHz。
功能描述
当IR模块接收到红外遥控器发射的红外信号时,便对其进行解码,然后传送给ARM系统。ARM系统再根据接收到的码的不同进行相应的操作,实现期望的功能。IR模块连接在ARM子系统内的APB总线上,当芯片处于低功耗状态时(CPU处于低频模式),IR模块会在接收一个完整的帧数据后,产生中断信号送给CPU,实现红外遥控唤醒功能。
通过对多种红外遥控器发出的信号进行分析,发现在不同的遥控器发出的红外指令中,引导码各不相同,而且后面的控制指令也有较大差别,甚至指令码的位数也不相同,这是因为这些红外遥控器的设计没有遵循统一的红外遥控标准。尽管遵循的标准不同,但是基本的编码思想是相同的,都是采用不同的周期和不同占空比的脉冲分别表示0和1。不同遥控器占空比可能不同,且脉冲周期也不相同。根据这些不同,对一些码型类似的红外数据进行分类:NEC with simple repeat code的数据格式、NEC with full repeat code的数据格式、TC9012的数据格式和SONY的数据格式。
红外接收数据码型统计情况如表14-17~表14-19所示。
说明
此统计表以芯片实测为准,表格上的数据只是以前的测量值,并不完全正确。
红外接收数据码型的统计表(NEC with simple repeat code)
| 数据格式 | NEC with simple repeat code | ||||
|---|---|---|---|---|---|
| uPD6121G | D6121/BU5777/D1913 | LC7461M-C13 | AEHA | ||
| 引导码(10μs) | LEAD_S | 900 | 900 | 900 | 337.6 |
| LEAD_E | 450 | 450 | 450 | 168.8 | |
| bit0(10μs) | B0_L | 56 | 56 | 56 | 42.2 |
| B0_H | 56 | 56 | 56 | 42.2 | |
| bit1(10μs) | B1_L | 56 | 56 | 56 | 42.2 |
| B1_H | 169 | 169 | 169 | 126.6 | |
| simple repeat code (10μs) | SLEAD_S | 900 | 900 | 900 | 337.6 |
| SLEAD_E | 225 | 225 | 225 | 337.6 | |
| burst(10μs) | 55 | 55 | 55 | 42.2 | |
| 帧长(10μs) | 10800 | 10800 | 10800 | 8777.6~12828.8 | |
| 有效数据位 | 32 | 32 | 42 | 48 |
红外接收数据码型的统计表(NEC with full repeat code)
| 数据格式 | NEC with full repeat code | |||||||
|---|---|---|---|---|---|---|---|---|
| uPD6121G | LC7461M-C13 | MN6024-C5D6 | MN6014-C6D6 | MATNEW | MN6030 | PANASONIC | ||
| 引导码 (10μs) | LEAD_S | 900 | 900 | 337.6 | 349.2 | 348.8 | 349 | 352 |
| LEAD_E | 450 | 450 | 337.6 | 349.2 | 374.4 | 349 | 352 | |
| bit0 (10μs) | B0_L | 56 | 56 | 84.4 | 87.3 | 43.6 | 87.3 | 88 |
| B0_H | 56 | 56 | 84.4 | 87.3 | 43.6 | 87.3 | 88 | |
| bit1 (10μs) | B1_L | 56 | 56 | 84.4 | 87.3 | 43.6 | 87.3 | 88 |
| B1_H | 169 | 169 | 253.2 | 174.6 | 130.8 | 261.9 | 264 | |
| simple repeat code (10μs) | SLEAD_S | 无 | 无 | 无 | 无 | 无 | 无 | 无 |
| SLEAD_E | ||||||||
| burst(10μs) | 55 | 55 | 84.4 | 87.3 | 43.6 | 87.3 | 88 | |
| 帧长(10μs) | 10800 | 10800 | 10130 | 10470 | 12413.6~16594.4 | 10500 | 10400 | |
| 有效数据位 | 32 | 42 | 22 | 24 | 48 | 22 | 22 |
| 数据格式 | TC9012 | SONY | ||||
|---|---|---|---|---|---|---|
| TC9012F/9243 | SONY-D7C5 | SONY-D7C6 | SONY-D7C8 | SONY-D7C13 | ||
| 引导码 (10μs) | LEAD_S | 450 | 240 | 240 | 240 | 240 |
| LEAD_E | 450 | 60 | 60 | 60 | 60 | |
| bit0 (10μs) | B0_L | 56 | 60 | 60 | 60 | 60 |
| B0_H | 56 | 60 | 60 | 60 | 60 | |
| bit1 (10μs) | B1_L | 56 | 120 | 120 | 120 | 120 |
| B1_H | 169 | 60 | 60 | 60 | 60 | |
| simple repeat code (10μs) | SLEAD_S | 无 | 无 | 无 | 无 | 无 |
| SLEAD_E | ||||||
| burst(10μs) | 56 | 无 | 无 | 无 | 无 | |
| 帧长(10μs) | 10800 | 4500 | 4500 | 4500 | 4500 | |
| 有效数据位 | 32 | 12 | 13 | 15 | 20 |
NEC with simple repeat code数据格式
帧格式
NEC with simple repeat code数据格式是由START(引导码)、数据码和burst三部分组成,其中START是由一个起始码(低电平),一个结束码(高电平)组成;数据码的有效位数以及某位表示的含义由具体的码型而定,它是按照LSB first的顺序接收的;burst信号用于接收最后一个数据码位。
发送单个NEC with simple repeat code的帧格式如图14-32所示。
发送单个NEC with simple repeat code码的帧格式

如果按键时间持续超过一帧的时间,则在收到完整数据帧后,接下来收到的数据帧仅由简化的引导码和burst信号组成。引导码也是由起始码(低电平)和结束码(高电平)组成,持续按键连续发送NEC with simple repeat code码的帧格式如图14-33所示。
持续按键连续发送NEC with simple repeat code码的帧格式

码格式
NEC with simple repeat code的bit0或bit1定义如图14-34所示。
NEC with simple repeat code码bit0和bit1定义

NEC simple repeat code单发代码格式和连发代码格式分别如图14-35和图14-36所示。
NEC with simple repeat code码单发代码格式

NEC with simple repeat code码连发代码格式

注1:图中高低电平脉宽的宽度以及帧长均有各个具体码型决定,请参见表14-17~表14-19。
注2:帧长不能大于160ms,否则无法识别简化引导码。
NEC with full repeat code数据格式
帧格式
NEC with full repeat code的数据格式是由START(引导码)、数据码和burst三部分组成。START是由一个起始码(低电平)和一个结束码(高电平)组成;数据码的有效位数以及某位表示的含义由具体的码型而定,它是按照LSB first的顺序接收的;burst信号用于接收最后一个数据码位。发送单个NEC with full repeat code帧格式如图14-37所示。
发送单个NEC with full repeat code码的帧格式

如果按键时间持续超过一帧的时间,则在收到完整数据帧(第一帧)后,接下来收到的数据帧还是一个完整的数据帧格式(即按照帧间隔重复发送第一帧数据),持续按键连续发送NEC with full repeat code码的帧格式如图14-38所示。
持续按键连续发送NEC with full repeat code码的帧格式

通过图14-37和图14-38可以看出:NEC with simple repeat code与NEC with full repeat code唯一不同之处就是重复帧的格式,NEC with simple repeat code发送的是简化的引导码,而NEC with full repeat code发送的是完整帧格式,第一帧和重复帧完全相同。
码格式
NEC with full repeat code码bit0或bit1定义如图14-39所示。
NEC with full repeat code码bit0和bit1定义
说明
NEC with full repeat code码单发代码格式如图14-40所示。
NEC with full repeat code码单发代码格式

注:图中高低电平的脉宽宽度以及帧长均有各个具体码型决定,请参见表14-17~表14-19。
TC9012数据格式
帧格式
须知
根据TC9012码的数据格式特点,所有按键编码的第一位都必须全是1或者全是0,否则会产生不需要的持续按键帧。
TC9012的数据格式是由START(引导码)、数据码和burst三部分组成,其中START是由一个起始码(低电平),一个结束码(高电平)组成;数据码的有效位数以及某位表示的含义由具体的码型而定,其是按照LSB first的顺序接收的;burst信号用于接收最后一个数据码位。发送单个TC9012码的帧格式如图14-41所示。

如果按键时间持续超过一帧的时间,则在收到完整数据帧后,接下来收到的数据帧由引导码、一个数据位和burst信号三部分组成。引导码也是由起始码(低电平)和结束码(高电平)组成;该数据位是上一帧接收的第一个数据位(C0)的反码。发送连续TC9012码的帧格式如图14-42所示。

码格式
TC9012码bit0或bit1定义如图14-43所示。

TC9012码单发代码格式如图14-44所示。

C0=1时,TC9012码连发代码格式如图14-45所示。

C0=0时,TC9012码连发代码格式如图14-46所示。

注:图中高低电平的脉宽宽度以及帧长均有各个具体码型决定。请参见表14-17~表14-19。另外值得注意的是帧长不能大于160ms,否则无法识别重复帧。
SONY的数据格式
帧格式
SONY码数据格式是由START(引导码)和数据码两部分组成。其中START由一个起始码(低电平),一个结束码(高电平)组成;数据码的有效位数以及某位表示的含义由具体的码型而定,其是按照LSB first的顺序接收的。发送单个SONY码帧格式如图14-47所示。

如果按键时间持续超过一帧的时间,则再收到完整数据帧后,接下来收到的数据帧还是一个完整的数据帧格式。持续按键连续发送SONY码帧格式如图14-48所示。

码格式
SONY码bit0或bit1定义如图14-49所示。

注:图中高低电平的脉宽宽度以及帧长均有各个具体码型决定。请参见表14-17~表14-19。
工作方式
软复位
配置CRG寄存器PERI_CRG4496[ir_cken]为1,打开IR模块的时钟门控。配置CRG寄存器PERI_CRG4496 [ir_srst_req]为1,对IR模块单独软复位。复位后各配置寄存器的值均复位为默认值,因此复位后需要重新对这些寄存器进行初始化配置。
寄存器配置实例
IR模块初始化操作流程如图14-50所示。

IR模块初始化操作流程如下:
配置CRG相关寄存器,打开IR时钟门控,解除IR复位。
选中IR模块地址空间,开始IR初始化配置操作。
配置IR_EN bit[0]为1,打开IR接收模块。
读IR_BUSY,判断IR模块配置的当前状态。
- 若读取的值为1,表明IR模块处于配置忙状态,则继续查询IR_BUSY(注意:此时软件不要对IR模块的其他控制寄存器进行配置,否则配置无效)。
- 若读取的值为0,表明IR模块处于配置空闲状态,则执行步骤 5。
配置IR_CFG、IR_LEADS、IR_LEADE、IR_SLEADE、IR_B0、IR_B1、IR_INT_MASK。注意:用户可以根据需要更新相应寄存器,如果不更新,则寄存器保持原值。
配置IR_START。必须要等所有的IR控制寄存器都配置完成后,才能配置IR_START,因为它被用来产生启动信号,只要对其进行配置,IR模块就会根据控制寄存器的值进行红外数据接收。
----结束

读取解码数据的操作流程如下:
选中IR模块地址空间。
中断或查询方式等待接收数据帧。
- 中断方式下,当CPU接收到IR模块的中断请求信号时,查询IR_INT_STATUS[intms_rcv]的值。若读取的值为1表明IR模块接收到一个数据帧,执行步骤 4;若读取的值为0,重新执行步骤 3,继续等待中断。
- 查询方式下,软件不停(或每间隔一定时间)读取IR_INT_STATUS[intrs_rcv]的值,若读取的值为1表明IR模块接收到一个数据帧,执行步骤 4;若读取的值为0时,表明IR模块尚未接收到数据帧,重新执行步骤 3,继续查询。
读取数据寄存器IR_DATAH。(如果一帧内的数据位数不大于32位,可以省略此步骤)
读取数据寄存器IR_DATAL。
清除接收数据中断。
----结束
IR寄存器概览
IR寄存器概览如表14-20所示。
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x000 | IR_EN | IR接收使能控制寄存器 | 14-150 |
| 0x004 | IR_CFG | IR配置寄存器 | 14-151 |
| 0x008 | IR_LEADS | 引导码起始位裕量配置寄存器(只在IR_CFG [ir_mode]=0时使用) | 14-153 |
| 0x00C | IR_LEADE | 引导码结束位裕量配置寄存器(只在IR_CFG [ir_mode]=0时使用) | 14-154 |
| 0x010 | IR_SLEADE | 简化引导码结束位裕量配置寄存器(只在IR_CFG [ir_mode]=0时使用) | 14-155 |
| 0x014 | IR_B0 | 数据0的判断电平裕量配置寄存器(只在IR_CFG [ir_mode]=0时使用) | 14-156 |
| 0x018 | IR_B1 | 数据1的判断电平裕量配置寄存器(只在IR_CFG [ir_mode]=0时使用) | 14-157 |
| 0x01C | IR_BUSY | 配置忙标志寄存器 | 14-158 |
| 0x020 | IR_DATAH | IR接收解码数据的高16位寄存器(当IR_CFG[ir_mode]=0时)或symbol FIFO中的symbol个数寄存器(当IR_CFG[ir_mode]=1时) | 14-158 |
| 0x024 | IR_DATAL | IR接收解码数据的低32位寄存器(当IR_CFG[ir_mode]=0时)或IR模块接收到的symbol宽度寄存器(当IR_CFG[ir_mode]=1时) | 14-159 |
| 0x028 | IR_INT_MASK | IR中断屏蔽寄存器 | 14-160 |
| 0x02C | IR_INT_STATUS | IR中断状态寄存器 | 14-162 |
| 0x030 | IR_INT_CLR | IR中断清除寄存器 | 14-164 |
| 0x034 | IR_START | IR启动配置寄存器 | 14-166 |
IR寄存器描述
IR_EN
IR_EN为IR接收使能控制寄存器。
须知
软件必须先配置寄存器IR_EN[ir_en]=1,才能配置其他寄存器,否则配置无效。当寄存器IR_EN[ir_en]=0时,其他寄存器只可读不可写,且读出值为寄存器的复位值。
Offset Address: 0x000 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:1] | RO | reserved | 保留。 | 0x00000000 |
| [0] | RW | ir_en | IR接收模块的使能。 0:关闭IR接收模块; 1:打开IR接收模块。 | 0x0 |
IR_CFG
IR_CFG为IR配置寄存器。
须知
必须在确保IR_BUSY[ir_busy]=0并且IR_EN[ir_en]=1时,才能配置此寄存器,否则配置无效,寄存器保持原值。
IR支持的参考时钟频率为1MHz~128MHz,其与分频因子ir_freq的对应关系是:
- 当参考时钟频率为1MHz时,分频因子ir_freq需配置为0x00。
- 当参考时钟频率为128MHz时,分频因子ir_freq需配置为0x7F。
- 当IR的参考时钟为1MHz~128MHz内的非整数倍频率时,选用四舍五入的方法选择相应的分频因子。举例:参考时钟为12.1MHz,选用分频因子为0x0B;参考时钟为12.8MHz,选用分频因子为0x0C。

Offset Address: 0x004 Total Reset Value: 0x3E80_1F0B
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:16] | RW | ir_max_level_width | 当IR_CFG [ir_mode]=0时,无效; 当IR_CFG [ir_mode]=1时,表示symbol的最大电平宽度(单位10μs),用以确定一个symbol stream结束。 | 0x3E80 |
| [15:14] | RW | ir_format | 当IR_CFG [ir_mode]=0时,表示数据码型。 00:NEC with simple repeat code的数据格式; 01:TC9012的数据格式; 10:NEC with full repeat code的数据格式; 11:SONY的数据格式。 关于具体码型属于哪类码族,请参见表14-17~表14-19。 当IR_CFG [ir_mode]=1时,表示symbol格式。 bit[15]:保留; bit[14]的含义如下: 0:symbol的格式为先低后高,symbol stream结束在高电平; 1:symbol的格式为先高后低,symbol stream结束在低电平。 | 0x0 |
| [13:8] | RW | ir_bits | 当IR_CFG [ir_mode]=0时,表示一帧内的数据位数。 0x00~0x2F:分别对应一帧内包含1~48个数据位; 0x30~0x3F:保留。 如果软件对该域配置0x30~0x3F范围内的值,则配置无效,ir_bits保持原值不变。 当IR_CFG [ir_mode]=1时,表示接收到symbol的中断水线。 bit[13]:保留; bit[12:8]:0x0~0x1F:分别对应FIFO中至少有1~32个symbol时报中断。 | 0x1F |
| [7] | RW | ir_mode | IR工作模式。 0:输出解码后的完整数据帧; 1:只输出symbol宽度。 | 0x0 |
| [6:0] | RW | ir_freq | 工作时钟分频因子。 0x00~0x7F分别对应工作时钟分频因子1~128。 | 0xB |
IR_LEADS
IR_LEADS为引导码起始位裕量配置寄存器(只在IR_CFG [ir_mode]=0时使用)。
须知
必须在确保IR_BUSY[ir_busy]=0并且IR_EN[ir_en]=1时,才能配置此寄存器,否则配置无效,寄存器保持原值;另外寄存器保留值配置无效,仍然保持原值不变。
为了准确判断引导码的起始位,需要在具体码型的典型值左右考虑一定的裕量,具体码型的典型值请参见表14-17~表14-19中LEAD_S的值。
- 对于典型值不小于400(其精度为10μs)的脉宽,建议裕量范围设为典型值的8%。举例说明:D6121码型,其LEAD_S的典型值为900,那么相应的cnt_leads_min=900 x 92%=828=0x33C,cnt_leads_max=900 x 108%=972=0x3CC。
- 对于典型值小于400(其精度为10μs)的脉宽,建议裕量范围设为典型值的20%。举例说明:SONY-D7C5码型,其LEAD_S的典型值为240,那么相应的cnt_leads_min=240 x 80%=192=0xC0,cnt_leads_max=240 x 120%=288=0x120。
基本的配置原则:cnt_leads_max不小于cnt_leads_min,并且cnt_leads_min大于cnt0_b_max和cnt1_b_max
Offset Address: 0x008 Total Reset Value: 0x033C_03CC
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:26] | RO | reserved | 保留。 | 0x00 |
| [25:16] | RW | cnt_leads_min | 引导码起始位的最小脉宽。 0x000~0x007:保留。 | 0x33C |
| [15:10] | RO | reserved | 保留。 | 0x00 |
| [9:0] | RW | cnt_leads_max | 引导码起始位的最大脉宽。 0x000~0x007:保留。 | 0x3CC |
IR_LEADE
IR_LEADE为引导码结束位裕量配置寄存器(只在IR_CFG [ir_mode]=0时使用)。
须知
必须在确保IR_BUSY [ir_busy]=0并且IR_EN [ir_en]=1时,才能配置此寄存器,否则配置无效,寄存器保持原值;另外寄存器保留值配置无效,仍然保持原值不变。
对于NEC with simple repeat code的码族,其cnt_sleade的裕量范围和cnt_leade的裕量范围设置不能重合,否则当实际计数值落入重合范围内时,无法识别简化引导码,会导致帧格式错误。
为了准确判断引导码的结束位,需要在具体码型的典型值左右考虑一定的裕量,裕量范围约为典型值的8%。具体码型的典型值请参见表14-17~表14-19中LEAD_E的值。
- 对于典型值不小于400(其精度为10μs)的脉宽,建议裕量范围设为典型值的8%。举例说明:D6121码型,其LEAD_E的典型值为450,那么相应的cnt_leade_min=450 x 92%=414=0x19E,cnt_leade_max=450 x 108%=486=0x1E6。
- 对于典型值小于400(其精度为10μs)的脉宽,建议裕量范围设为典型值的20%。举例说明:SONY-D7C5码型,其LEAD_E的典型值为60,那么相应的cnt_leade_min=60 x 80%=48=0x030,cnt_leade_max=60 x 120%=72=0x048。
基本的配置原则是:cnt_leade_max不小于cnt_leade_min的值。
Offset Address: 0x00C Total Reset Value: 0x019E_01E6
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:25] | RO | reserved | 保留。 | 0x00 |
| [24:16] | RW | cnt_leade_min | 引导码结束位的最小脉宽。 0x000~0x007:保留。 | 0x19E |
| [15:9] | RO | reserved | 保留。 | 0x00 |
| [8:0] | RW | cnt_leade_max | 引导码结束位的最大脉宽。 0x000~0x007:保留。 | 0x1E6 |
IR_SLEADE
IR_SLEADE为简化引导码结束位裕量配置寄存器(只在IR_CFG [ir_mode]=0时使用)。
须知
必须在确保IR_BUSY [ir_busy]=0并且IR_EN [ir_en]=1时,才能配置此寄存器,否则配置无效,寄存器保持原值;另外寄存器保留值配置无效,仍然保持原值不变。
- 对于NEC with simple repeat code的码族,cnt_sleade的裕量范围和cnt_leade的裕量范围设置不能重合,否则当实际计数值落入重合范围内时,无法识别简化引导码,会导致帧格式错误。
- 对于NEC with simple repeat code的数据格式,才需配置此寄存器;对于其他格式,无需配置此寄存器。
为了准确判断简化引导码的结束位,需要在具体码型的典型值左右考虑一定的裕量。具体码型的典型值请参见表14-17~表14-19中SLEAD_E的值。
- 对于典型值不小于225(其精度为10μs)的脉宽,建议裕量范围设为典型值的8%。举例说明:D6121码型,其SLEAD_E的典型值为225,那么相应的cnt_sleade_min=225 x 92%=207=0xCF,cnt_sleade_max=225 x 108%=243=0xF3。
- 对于典型值小于225(其精度为10μs)的脉宽,建议裕量范围设为典型值的20%。举例说明:比如某种码型其SLEAD_E的典型值为60,那么相应的cnt_sleade_min=60 x 80%=48=0x30,cnt_sleade_max=60 x 120%=72=0x48。
基本的配置原则是:cnt_sleade_max不小于cnt_sleade_min的值。
Offset Address: 0x010 Total Reset Value: 0x00CF_00F3
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:25] | RO | reserved | 保留。 | 0x00 |
| [24:16] | RW | cnt_sleade_min | 简化引导码结束位的最小脉宽。 0x000~0x007:保留。 | 0x0CF |
| [15:9] | RO | reserved | 保留。 | 0x00 |
| [8:0] | RW | cnt_sleade_max | 简化引导码起始位的最大脉宽。 0x000~0x007:保留。 | 0x0F3 |
IR_B0
IR_B0为数据0的判断电平裕量配置寄存器(只在IR_CFG [ir_mode]=0时使用)。
须知
必须在确保IR_BUSY [ir_busy]=0并且IR_EN [ir_en]=1时,才能配置此寄存器,否则配置无效,寄存器保持原值;另外寄存器保留值配置无效,仍然保持原值不变。
对于四类码型,bit0判断电平裕量范围和bit1判断电平范围设置不能重合,否则当实际计数值落入重合范围内时,无法识别bit1,只能被误解接收到bit0。
为了准确判断bit0,需要在具体码型的典型值左右考虑一定的裕量,裕量范围约为典型值的20%。
对于NEC with simple repeat code、NEC with full repeat code和TC9012这三类码型,其包含的具体码型的典型值请参见表14-17~表14-19中B0_H的值。举例说明:D6121码型,其B0_H的典型值为56(其精度为10μs),那么相应的cnt0_b_min=56 x 80%=45=0x2D,cnt0_b_max=56 x 120%=67=0x43。
对于SONY的数据格式,其包含的具体码型的典型值请参见表14-17~表14-19中B0_L的值。举例说明:SONY-D7C5码型,其B0_L的典型值为60(其精度为10μs),那么相应的cnt0_b_min=60 x 80%=48=0x30,cnt0_b_max=60 x 120%=72=0x48。
基本的配置原则是:cnt0_b_max不小于cnt0_b_min的值。
Offset Address: 0x014 Total Reset Value: 0x002D_0043
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:25] | RO | reserved | 保留。 | 0x00 |
| [24:16] | RW | cnt0_b_min | bit0判断电平的最小脉宽。 0x000~0x007:保留。 | 0x02D |
| [15:9] | RO | reserved | 保留。 | 0x00 |
| [8:0] | RW | cnt0_b_max | bit0判断电平的最大脉宽。 0x000~0x007:保留。 | 0x043 |
IR_B1
IR_B1为数据1的判断电平裕量配置寄存器(只在IR_CFG [ir_mode]=0时使用)。
须知
必须在确保IR_BUSY [0]=0并且IR_EN [0]=1时,才能配置此寄存器,否则配置无效,寄存器保持原值;另外寄存器保留值配置无效,仍然保持原值不变。
对于四类码型,bit0判断电平裕量范围和bit1判断电平范围设置不能重合,否则当实际计数值落入重合范围内时,无法识别bit1,只能被误解接收到bit0。
为了准确判断bit1,需要在具体码型的典型值左右考虑一定的裕量,裕量范围约为典型值的20%。
对于NEC with simple repeat code、NEC with full repeat code和TC9012这三类码族,其包含的具体码型的典型值请参见表14-17~表14-19中B1_H的值。举例说明:D6121码型,其B1_H的典型值为169(其精度为10μs),那么相应的cnt1_b_min=169 x 80%=135=0x87,cnt1_b_max=169 x 120%=203=0xCB。
对于SONY的数据格式,其包含的具体码型的典型值请参见表14-17~表14-19中B1_L的值。举例说明:SONY-D7C5码型,其B1_L的典型值为120(其精度为10μs),那么相应的cnt1_b_min=120 x 80%=96=0x60,cnt1_b_max=120 x 120%=144=0x90。
基本的配置原则是:cnt1_b_max不小于cnt1_b_min的值。
Offset Address: 0x018 Total Reset Value: 0x0087_00CB
| Bits | Access | Name | Description | Reset |
| [31:25] | RO | reserved | 保留。 | 0x00 |
| [24:16] | RW | cnt1_b_min | bit1判断电平的最小脉宽。 0x000~0x007:保留。 | 0x087 |
| [15:9] | RO | reserved | 保留。 | 0x00 |
| [8:0] | RW | cnt1_b_max | bit1判断电平的最大脉宽。 0x000~0x007:保留。 | 0x0CB |
IR_BUSY
IR_BUSY为配置忙标志寄存器。
Offset Address: 0x01C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:1] | RO | reserved | 保留。 | 0x00000000 |
| [0] | RO | ir_busy | 忙状态标志。 0:空闲状态,软件可以配置数据; 1:忙状态,软件不可以配置数据。 | 0x0 |
IR_DATAH
IR_DATAH为IR接收解码数据的高16位寄存器(当IR_CFG [ir_mode]=0时)或symbol FIFO中的symbol个数寄存器(当IR_CFG [ir_mode]=1时)。
IR_DATAH是接收到的解码数据的高16位,IR_DATAL是接收到的解码数据的低32位。具体哪些数据位有效取决于具体码型一帧内包含的有效数据位数,请参见表14-17~表14-19的有效数据位。
数据存储原则:按照由高到低的顺序存储在IR_DATAH和IR_DATAL中(MSB……LSB),先存满IR_DATAL,然后再存放IR_DATAH,未用到的高位作为保留位。软件读取数据的顺序必须是:先读IR_DATAH,然后再读IR_DATAL。
对于具体每个数据位表示的含义,硬件不做判断,仅负责接收所有数据位,最终由软件统一处理。
Offset Address: 0x020 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:16] | RO | reserved | 保留。 | 0x0000 |
| [15:0] | RO | ir_datah | 当IR_CFG [ir_mode]=0时,表示接收到的解码数据的高16位数据。 当IR_CFG [ir_mode]=1时,表示symbol FIFO中的symbol个数。 bit[15:6]:保留; bit[5:0]:symbol FIFO中的symbol个数。 | 0x0000 |
IR_DATAL
IR_DATAL为IR接收解码数据的低32位寄存器(当IR_CFG [ir_mode]=0时)或,IR模块接收到的symbol宽度寄存器(当IR_CFG [ir_mode]=1时)。
Offset Address: 0x024 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:0] | RO | ir_datal | 当IR_CFG [ir_mode]=0时,表示接收到的解码数据的低32位数据。 当IR_CFG [ir_mode]=1时,表示IR模块接收到的symbol宽度。 bit[31:16]的含义如下: - symbol的格式为先低后高时,表示接收到的symbol的高电平宽度(单位是10μs); - symbol的格式为先高后低时,表示接收到的symbol的低电平宽度(单位是10μs)。 bit[15:0]的含义如下: - symbol的格式为先低后高时,表示接收到的symbol的低电平宽度(单位是10μs); - symbol的格式为先高后低时,表示接收到的symbol的高电平宽度(单位是10μs)。 | 0x0000_0000 |
IR_INT_MASK
IR_INT_MASK为IR中断屏蔽寄存器。
须知
必须在确保IR_EN [ir_en]=1时,才能配置此寄存器,否则配置无效,寄存器保持原值。
如果中断全部屏蔽后,无法支持红外遥控唤醒功能。
- IR_CFG [ir_mode]=0时,IR_INT_MASK bit[3:0]有效;
- IR_CFG [ir_mode]=1时,IR_INT_MASK bit[18:16]有效。
涉及到的中断定义如下:
- 接收数据溢出中断
如果CPU没有及时响应取走当前帧的数据,而下一帧数据也已经收到的情况,下一帧数据将会覆盖当前帧数据,同时上报屏蔽前接收数据溢出错中断请求。
- 接收数据帧格式错误中断
如果接收到的数据帧不完整以及数据脉宽不满足裕量范围,则会上报屏蔽前的接收帧格式错误中断请求。
- 接收到数据帧中断
当接收到一个完整的帧数据后,则会上报屏蔽前接收到数据帧中断请求。
- 支持按键释放的检测中断
对于NEC with simple repeat code和TC9012码族的数据格式,在检测到一个有效起始同步码之后的160ms内,如果没有再次检测到起始同步码,或者检测到非简化引导码而是有效数据帧时,则会上报屏蔽前遥控器按键释放中断。对于NEC with full repeat code和SONY两种码制不支持按键释放中断。
- 接收symbol溢出中断
如果CPU没有及时响应取走数据,导致symbol FIFO满,而下一个symbol已经收到,则会上报屏蔽前接收symbol溢出错中断请求。
- 接收到symbol中断
当接收到一个完整的symbol后,且symbol FIFO中的symbol个数超过IR_CFG [ir_bits]设置的水线,则会上报屏蔽前接收到symbol中断请求。
- symbol超时中断
在接收到一个有效的symbol后,IR_CFG [ir_max_level_width]设置的时间内没有再接收到新的symbol的中断请求,则会上报屏蔽前symbol超时中断请求。
硬件没有中断优先级仲裁,任何一个或多个屏蔽后的中断源有效,都会产生中断。
Offset Address: 0x028 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:19] | RO | reserved | 保留。 | 0x0000 |
| [18] | RW | intm_overrun | 当IR_CFG [ir_mode]=1时,symbol溢出中断屏蔽。 0:不屏蔽; 1:屏蔽。 | 0x0 |
| [17] | RW | intm_time_out | 当IR_CFG [ir_mode]=1时,symbol超时中断屏蔽。 0:不屏蔽; 1:屏蔽。 | 0x0 |
| [16] | RW | intm_symb_rcv | 当IR_CFG [ir_mode]=1时,接收到N个symbol中断屏蔽。 0:不屏蔽; 1:屏蔽。 | 0x0 |
| [15:4] | RO | reserved | 保留。 | 0x0000 |
| [3] | RW | intm_release | 当IR_CFG [ir_mode]=0时,按键释放中断屏蔽。 0:不屏蔽; 1:屏蔽。 | 0x0 |
| [2] | RW | intm_overflow | 当IR_CFG [ir_mode]=0时,接收数据溢出中断屏蔽。 0:不屏蔽; 1:屏蔽。 | 0x0 |
| [1] | RW | intm_frame | 当IR_CFG [ir_mode]=0时,接收数据帧格式错误中断屏蔽。 0:不屏蔽; 1:屏蔽。 | 0x0 |
| [0] | RW | intm_rcv | 当IR_CFG [ir_mode]=0时,接收到数据帧中断屏蔽。 0:不屏蔽; 1:屏蔽。 | 0x0 |
IR_INT_STATUS
IR_INT_STATUS为IR中断状态寄存器。
须知
- IR_CFG [ir_mode]=0时,IR_INT_STATUS bit[3:0]和IR_INT_STATUS bit[19:16]有效;
- IR_CFG [ir_mode]=1时,IR_INT_STATUS bit[10:8]和IR_INT_STATUS bit[26:24]有效。
Offset Address: 0x02C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:27] | RO | reserved | 保留。 | 0x00 |
| [26] | RO | intms_overrun | 当IR_CFG [ir_mode]=1时,屏蔽后的symbol溢出中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [25] | RO | intms_time_out | 当IR_CFG [ir_mode]=1时,屏蔽后的symbol超时中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [24] | RO | intms_symb_rcv | 当IR_CFG [ir_mode]=1时,屏蔽后的接收到symbol的中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [23:20] | RO | reserved | 保留。 | 0x0 |
| [19] | RO | intms_release | 当IR_CFG [ir_mode]=0时,屏蔽后的按键释放的中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [18] | RO | intms_overflow | 当IR_CFG [ir_mode]=0时,屏蔽后的接收数据溢出错中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [17] | RO | intms_framerr | 当IR_CFG [ir_mode]=0时,屏蔽后的接收数据帧格式错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [16] | RO | intms_rcv | 当IR_CFG [ir_mode]=0时,屏蔽后的接收到数据帧中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [15:11] | RO | reserved | 保留。 | 0x0 |
| [10] | RO | intrs_overrun | 当IR_CFG [ir_mode]=1时,屏蔽前的symbol溢出中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [9] | RO | intrs_time_out | 当IR_CFG [ir_mode]=1时,屏蔽前的symbol超时中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [8] | RO | intrs_symb_rcv | 当IR_CFG [ir_mode]=1时,屏蔽前的接收到symbol的中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [7:4] | RO | reserved | 保留。 | 0x0 |
| [3] | RO | intrs_release | 当IR_CFG [ir_mode]=0时,屏蔽前的按键释放的中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [2] | RO | intrs_overflow | 当IR_CFG [ir_mode]=0时,屏蔽前的接收数据溢出错中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [1] | RO | intrs_framerr | 当IR_CFG [ir_mode]=0时,屏蔽前的接收数据帧格式错误中断状态。 0:无中断; 1:有中断。 | 0x0 |
| [0] | RO | intrs_rcv | 当IR_CFG [ir_mode]=0时,屏蔽前的接收到数据帧中断状态。 0:无中断; 1:有中断。 | 0x0 |
IR_INT_CLR
IR_INT_CLR为IR中断清除寄存器。
须知
IR_CFG [ir_mode]=0时,IR_INT_CLR bit[3:0]有效;
IR_CFG [ir_mode]=1时,IR_INT_CLR bit[18:16]有效。
Offset Address: 0x030 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:19] | RO | reserved | 保留。 | 0x0 |
| [18] | WC | intc_overrun | IR_CFG [ir_mode]=1时,清除symbol溢出中断请求。 0:无影响; 1:清除。 | 0x0 |
| [17] | WC | intc_time_out | IR_CFG [ir_mode]=1时,清除symbol超时中断请求。 0:无影响; 1:清除。 | 0x0 |
| [16] | WC | intc_symb_rcv | IR_CFG [ir_mode]=1时,清除接收到symbol中断请求。 0:无影响; 1:清除。 | 0x0 |
| [15:4] | RO | reserved | 保留。 | 0x0000 |
| [3] | WC | intc_release | IR_CFG [ir_mode]=0时,清除遥控器按键释放中断请求。 0:无影响; 1:清除。 | 0x0 |
| [2] | WC | intc_overflow | IR_CFG [ir_mode]=0时,清除接收数据溢出错中断请求。 0:无影响; 1:清除。 | 0x0 |
| [1] | WC | intc_framerr | IR_CFG [ir_mode]=0时,清除接收数据帧格式错误中断请求。 0:无影响; 1:清除。 | 0x0 |
| [0] | WC | intc_rcv | IR_CFG [ir_mode]=0时,清除接收到数据帧中断请求。 0:无影响; 1:清除。 如果接收数据帧中断请求产生后,软件未读走IR_DATAL中的数据就直接对本位进行写1操作,无法清除该中断请求。 | 0x0 |
IR_START
IR_START为IR启动配置寄存器。
在其他寄存器的值配置完成后,启动IR模块时,只要往该地址进行一次写操作(写操作数可以为任意值),就可以启动配置寄存器。
Offset Address: 0x034 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:1] | RO | reserved | 保留。 | 0x00000000 |
| [0] | WO | ir_start | IR启动配置寄存器。 | 0x0 |
GPIO
概述
芯片支持18组GPIO(General Purpose Input/Output),即GPIO0~GPIO17。每组GPIO提供8个可编程的输入输出管脚(GPIO17只有1个,即bit0,GPIO11只有7个,即bit04和bit67)。
每个管脚可以配置为输入或者输出。这些管脚用于生成特定应用的输出信号或采集特定应用的输入信号。作为输入管脚时,GPIO可作为中断源;作为输出管脚时,每个GPIO都可以独立地清0或置1。
GPIO可以根据电平或跳变值产生可屏蔽的中断。GPIOINTR(General Purpose Input Output Interrupt)信号给中断控制器一个指示,表示有中断发生。
须知
- GPIO具体管脚个数、管脚与其他管脚复用及相关复用控制的说明请参见 Hi3403V100_PINOUT_CN.xlsx。
- 对于默认是输出信号的管脚上复用的GPIO,请注意对接芯片和器件的管脚必须是输入。
- 由于管脚SDIO0_CCMD、SDIO0_CDATA03和SDIO0_CCLK_OUT(对应GPIO6_6、GPIO6_7、GPIO7_0GPIO7_3)是由芯片内部的powerswitch供电,所以当这些管脚用于GPIO功能时,需要把powerswitch的控制配置由PWR_SWITCH寄存器控制,即配置PWR_SWITCH[sdio0_pwr_ctrl_by_user]为0x1,PWR_SWITCH[sdio0_pwr_en_by_misc]为0x1。对于这些管脚,若要支持的电压为3.3V,则需要配置PWR_SWITCH[sdio0_io_mode_sel1_from_misc]为0x0,PWR_SWITCH[sdio0_pwr_sw_sel_by_misc]为0x0;若要支持的电压为1.8V,则需要配置PWR_SWITCH[sdio0_io_mode_sel1_from_misc]为0x1,PWR_SWITCH[sdio0_pwr_sw_sel_by_misc]为0x1。
- 由于管脚RGMII0_RXD03、RGMII0_RXDV、RGMII0_RXCK、RGMII0_TXD03、RGMII0_TXEN、RGMII0_TXCKOUT、EPHY0_CLK、EPHY0_RSTN、MDCK0、MDIO0(对应GPIO2_6、GPIO2_7、GPIO3_0GPIO3_7、GPIO4_0GPIO4_5)的供电电压由上电锁存寄存器RGMII0_IO_VDD3318_SEL(对应管脚为PWM0_OUT0_P)控制选择。对于这些管脚用于GPIO功能时,若要支持的电压为3.3V,则需要管脚PWM0_OUT0_P(即RGMII0_IO_VDD3318_SEL)外接下拉电阻;若要支持的电压为1.8V,则需要管脚PWM0_OUT0_P(即RGMII0_IO_VDD3318_SEL)外接上拉电阻。
- 由于管脚SDIO1_CDATA04、SDIO1_CCLK_OUT、SDIO1_CCMD、GPIO0_0和GPIO0_1(对应GPIO4_6、GPIO4_7、GPIO5_0GPIO5_3、GPIO0_0、GPIO0_1)的供电电压由上电锁存寄存器SDIO1_IO_VDD3318_SEL(对应管脚为PWM0_OUT1_P)控制选择。对于这些管脚用于GPIO功能时,若要支持的电压为3.3V,则需要管脚PWM0_OUT1_P(即SDIO1_IO_VDD3318_SEL)外接下拉电阻;若要支持的电压为1.8V,则需要管脚PWM0_OUT1_P(即SDIO1_IO_VDD3318_SEL)外接上拉电阻。
- 由于管脚UART1_RXD、UART1_TXD、UART1_RTSN、UART1_CTSN、UART2_RXD、UART2_TXD、UART2_RTSN、UART2_CTSN、SDIO0_CARD_DETECT、SDIO0_CARD_POWER_EN_N(对应GPIO5_4GPIO5_7、GPIO6_0GPIO6_5)的供电电压由上电锁存寄存器UART1_2_IO_VDD3318_SEL(对应管脚为GPIO0_3)外接上下拉电阻控制选择。对于这些管脚用于GPIO功能时,若要支持的电压为3.3V,则需要管脚GPIO0_3(即UART1_2_IO_VDD3318_SEL)外接下拉电阻;若要支持的电压为1.8V,则需要管脚GPIO0_3(即UART1_2_IO_VDD3318_SEL)外接上拉电阻。
特点
每个GPIO管脚均可配置为输入、输出。
- 作为输入管脚时,可作为中断源。
- 作为输出管脚时,每个GPIO管脚都可以独立地清0或置1。
工作方式
接口复位
在芯片上电复位或系统复位时,GPIO模块同时被复位,GPIO管脚在复位之后处于输入状态。
通用输入输出
每个管脚可以配置为输入或者输出,具体步骤如下:
参考“管脚复用控制寄存器”配置管脚的相应位,使能需要使用的GPIO管脚功能。
配置寄存器GPIO_DIR,选择GPIO是作为输入还是输出。
当配置成输入管脚时,读取GPIO_DATA寄存器可查看输入信号值;当配置成输出管脚时,通过向GPIO_DATA寄存器写入输出值可控制GPIO管脚输出电平。
----结束
须知
当GPIO用作输出时,应不使能GPIO的中断功能,否则当输出信号符合中断产生条件时,会产生GPIO中断。
中断操作
GPIO的中断通过GPIO_IS等7个寄存器进行控制。通过这些寄存器可以选择中断源、极性以及边沿特性。GPIO对应的中断号请参见“3.3 中断系统”。
当有多个中断同时发生时,将会统一汇集成一个中断进行上报,GPIO的中断映射关系请参见“3.3 中断系统”。
GPIO_IS、GPIO_IBE、GPIO_IEV三个寄存器共同决定了中断源的特性和中断触发类别。
通过GPIO_RIS和GPIO_MIS分别读取中断的原始状态和屏蔽后的状态。通过GPIO_IE可以控制中断的最终上报情况。此外还提供了单独的GPIO_IC用于对中断状态进行清除控制。
每个GPIO管脚都可以配置成中断模式,配置步骤如下:
配置GPIO_IS,选择边沿触发或电平触发。
配置GPIO_IEV,选择下降沿/上升沿触发和高电平/低电平触发。
如果选择边沿触发,需配置GPIO_IBE,选择单沿或双沿触发方式。
向寄存器GPIO_IC写0xFF,清中断。
配置GPIO_IE为1,使能中断。
----结束
须知
初始化过程中GPIO管脚上数据需保持稳定,以免产生假中断。
GPIO的中断设置由7个寄存器控制。当有一个或多个GPIO管脚产生中断,一个组合中断会输送到中断控制器。边沿触发和电平触发有以下不同:
- 边沿触发的中断:软件必需清除该中断以使能更深的中断。
- 电平触发的中断:外部中断源应该保持该电平直到处理器识别到该中断。
GPIO寄存器概览
芯片的GPIO基地址如表14-21所示。
| GPIO控制器 | 基地址 |
|---|---|
| GPIO17 | 0x0_110A_1000 |
| GPIO16 | 0x0_110A_0000 |
| GPIO15 | 0x0_1109_F000 |
| GPIO14 | 0x0_1109_E000 |
| GPIO13 | 0x0_1109_D000 |
| GPIO12 | 0x0_1109_C000 |
| GPIO11 | 0x0_1109_B000 |
| GPIO10 | 0x0_1109_A000 |
| GPIO9 | 0x0_1109_9000 |
| GPIO8 | 0x0_1109_8000 |
| GPIO7 | 0x0_1109_7000 |
| GPIO6 | 0x0_1109_6000 |
| GPIO5 | 0x0_1109_5000 |
| GPIO4 | 0x0_1109_4000 |
| GPIO3 | 0x0_1109_3000 |
| GPIO2 | 0x0_1109_2000 |
| GPIO1 | 0x0_1109_1000 |
| GPIO0 | 0x0_1109_0000 |
说明
GPIOn对应的寄存器地址为:GPIOn基地址+该寄存器偏移地址。
表14-22是单组GPIO内部寄存器的偏移地址以及定义,GPIO0~GPIOn具有相同的寄存器组。
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x000~0x3FC | GPIO_DATA | GPIO数据寄存器 | 14-171 |
| 0x400 | GPIO_DIR | GPIO方向控制寄存器 | 14-172 |
| 0x404 | GPIO_IS | GPIO中断触发寄存器 | 14-172 |
| 0x408 | GPIO_IBE | GPIO双沿触发中断寄存器 | 14-173 |
| 0x40C | GPIO_IEV | GPIO触发中断条件寄存器 | 14-173 |
| 0x410 | GPIO_IE | GPIO中断屏蔽寄存器 | 14-173 |
| 0x414 | GPIO_RIS | GPIO原始中断状态寄存器 | 14-174 |
| 0x418 | GPIO_MIS | GPIO屏蔽状态中断寄存器 | 14-174 |
| 0x41C | GPIO_IC | GPIO中断清除寄存器 | 14-174 |
GPIO寄存器描述
GPIO_DATA
GPIO_DATA为GPIO数据寄存器。用来对输入或输出数据进行缓存。
当配置GPIO_DIR中对应位为输出时,写入GPIO_DATA寄存器的值将会输出到相应的管脚(注意需要配置正确的管脚复用);如果配置为输入时,将会读取相应输入管脚的值。
须知
当GPIO_DIR相应的比特配置为输入时,有效读取的结果将返回管脚的值;当配置为输出的时候,有效读取的结果将返回写入的值。
GPIO_DATA寄存器利用PADDR[9:2]实现了读写寄存器比特的屏蔽操作。该寄存器对应256个地址空间。PADDR[9:2]分别对应GPIO_DATA[7:0],当相应的bit为高时,则可以对相应的位进行读写操作;反之,若对应bit为低则不能进行操作。例如:
- 若地址为0x3FC(0b11_1111_1100),则对GPIO_DATA[7:0]这8bit操作全部有效。
若地址为0x200(0b10_0000_0000),则仅对GPIO_DATA[7]的操作有效。
Offset Address: 0x000~0x3FC Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
| [7:0] | RW | gpio_data | 当GPIO配置为输入模式时,为GPIO输入数据;当GPIO配置为输出模式时,为输出数据。各比特均可独立控制。与GPIO_DIR配合使用。 | 0x00 |
GPIO_DIR
GPIO_DIR为GPIO方向控制寄存器。用来配置GPIO管脚方向。
Offset Address: 0x400 Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
| [7:0] | RW | gpio_dir | GPIO方向控制寄存器。bit[7:0]分别对应GPIO_DATA[7:0],各比特可独立控制。 0:输入; 1:输出。 | 0x00 |
GPIO_IS
GPIO_IS为GPIO中断触发寄存器。用来配置GPIO管脚触发电平方式。
Offset Address: 0x404 Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
| [7:0] | RW | gpio_is | GPIO中断触发控制寄存器,bit[7:0]分别对应GPIO_DATA[7:0],各比特独立控制。 0:边沿触发中断; 1:电平触发中断。 | 0x00 |
GPIO_IBE
GPIO_IBE为GPIO双沿触发中断寄存器。用来配置GPIO管脚沿触发方式。
Offset Address: 0x408 Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
| [7:0] | RW | gpio_ibe | GPIO中断沿触发控制寄存器,bit[7:0]分别对应GPIO_DATA[7:0],各比特独立控制。 0:单边沿触发中断,具体是上升沿还是下降沿触发由GPIO_IEV控制; 1:双边触发中断。 | 0x00 |
GPIO_IEV
GPIO_IEV为GPIO触发中断条件寄存器。用来配置GPIO管脚触发中断条件。
Offset Address: 0x40C Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
| [7:0] | RW | gpio_iev | GPIO触发中断条件寄存器,bit[7:0]分别对应GPIO_DATA[7:0],各比特独立控制。 0:下降沿或低电平触发中断; 1:上升沿或高电平触发中断。 | 0x00 |
GPIO_IE
GPIO_IE为GPIO中断屏蔽寄存器。用来屏蔽GPIO管脚中断。
Offset Address: 0x410 Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
| [7:0] | RW | gpio_ie | GPIO中断屏蔽寄存器,bit[7:0]分别对应GPIO_DATA[7:0],各比特独立控制。 0:屏蔽中断; 1:不屏蔽中断。 | 0x00 |
GPIO_RIS
GPIO_RIS为GPIO原始中断状态寄存器。用来查询GPIO管脚原始中断状态。
Offset Address: 0x414 Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
| [7:0] | RO | gpio_ris | GPIO原始中断寄存器,bit[7:0]分别对应GPIO_DATA[7:0],指示未屏蔽的中断状态。该状态不受GPIO_IE寄存器屏蔽控制。 0:未发生中断; 1:已发生中断。 | 0x00 |
GPIO_MIS
GPIO_MIS为GPIO屏蔽状态中断寄存器。用来查询GPIO管脚屏蔽后的中断状态。
Offset Address: 0x418 Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
| [7:0] | RO | gpio_mis | GPIO屏蔽后中断寄存器,bit[7:0]分别对应GPIO_DATA [7:0],指示经屏蔽后的中断状态。该状态受GPIO_IE寄存器屏蔽控制。 0:中断无效; 1:中断有效。 | 0x00 |
GPIO_IC
GPIO_IC为GPIO中断清除寄存器。用来清除GPIO管脚产生的中断,同时清除GPIO_RIS寄存器和GPIO_MIS寄存器。
Offset Address: 0x41C Total Reset Value: 0x00
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [7:0] | WC | gpio_ic | GPIO中断清除寄存器,bit[7:0]分别对应GPIO_DATA [7:0],各比特可独立控制。 0:无影响; 1:清除中断。 | 0x00 |
PCI Express
概述
PCI Express(或简称PCIe)主要应用于PCIe外扩SATA、网口、WiFi以及片间级联等。芯片支持一个PCI Express Gen2 X2控制器。
特点
芯片中PCI Express控制器具有以下特点:
- 支持Gen2,向下兼容Gen1。
- 支持最大Lane数为X2,向下兼容X1。
- 支持1 VC,1 TC。
- 支持RC模式。
- 支持EP模式。
- 支持DMA功能。
- 支持INTx中断机制。
- 支持MSI中断机制。
须知
EP模式时,支持6个BAR,大小依次为BAR0:8MB,BAR1:64KB,BAR2:1MB,BAR3:1MB,BAR4:64KB,BAR5:4KB,其中BAR5固定映射到“PCIe内部系统控制寄存器空间”,不可用作其他用途。
信号描述
芯片中PCI Express接口信号描述如下:
| 信号名称 | 方向 | 描述 | 对应管脚 |
|---|---|---|---|
| Pcie_refclk_m | B | PCIe参考时钟管脚负极 | PCIE_REFCLKM |
| Pcie_refclk_p | B | PCIe参考时钟管脚正极 | PCIE_REFCLKP |
| Pcie_rx0_m | I | PCIe lane0接收差分信号负极 | USB3_PCIE_RXM0 |
| Pcie_rx0_p | I | PCIe lane0接收差分信号正极 | USB3_PCIE_RXP0 |
| Pcie_tx0_m | O | PCIe lane0发送差分信号负极 | USB3_PCIE_TXM0 |
| Pcie_tx0_p | O | PCIe lane0发送差分信号正极 | USB3_PCIE_TXP0 |
| Pcie_rx1_m | I | PCIe lane1接收差分信号负极 | USB3_PCIE_RXM1 |
| Pcie_rx1_p | I | PCIe lane1接收差分信号正极 | USB3_PCIE_RXP1 |
| Pcie_tx1_m | O | PCIe lane1发送差分信号负极 | USB3_PCIE_TXM1 |
| Pcie_tx1_p | O | PCIe lane1发送差分信号正极 | USB3_PCIE_TXP1 |

须知
在芯片中,PCIE与USB3.0接口信号是复用的,应用时需要根据场景选择复用模式。复用模式由UPS_MODE0、UPS_MODE1(与SENSOR0_CLK、SENSOR0_HS复用)管脚上电时的上下拉决定。请参考Hi3403V100_PINOUT_CN.xlsx中管脚信息表页面。
功能描述
RC(Root-Complex)模式
PCIe接口在RC模式下可与其它PCIe EP设备进行对接以实现功能扩展。
PCIe控制器RC模式下的应用框图如图14-53所示。

PCIe控制器还可以连接SWITCH设备,实现更多数量的功能扩展,RC模式下与SWITCH设备连接应用框图如图14-54所示。
PCIe控制器与PCIe switch设备连接应用框图(RC模式)

EP(End-Point)模式
芯片中的PCIe接口可以设置为EP模式,以实现与PCIe RC或SWITCH设备对接。

DMA功能
PCIe控制器内含一个DMA控制器,DMA控制器包含有两个DMA通道(一个DMA读通道和一个DMA写通道)。PCIe控制器内包含的DMA控制器用于大数据量存储器读写事务,以提高数据搬移的效率。
DMA控制器可以实现如下的存储器读写事务:
- DMA写:将一块数据从本地内存空间搬移至对端设备的内存空间。
- DMA读:将一块数据从对端设备的内存空间搬移至本地内存空间。
INTx功能
PCIe控制器支持基于消息(Message)的INTx中断机制。
- PCIe控制器工作在EP模式时,可通过Assert_INTA和Dessert_INTA的消息的方式,上报INTA中断给RC。
- PCIe控制器工作在RC模式时,可接收下游设备上报的Assert_INTx和Dessert_INTx的消息,并产生PCIE_INTA、PCIE_INTB、PCIE_INTC或PCIE_INTD中断。
MSI(Message Signaled Interrupts)功能
PCIe控制器支持MSI中断机制。
- PCIe控制器工作在EP模式时,支持MSI报文产生,并上报中断给RC设备。
- PCIe控制器工作在RC模式时,支持MSI中断管理单元,负责处理EP上报的MSI报文,并产生PCIE_MSI_INT中断。
工作方式
时钟和复位
PHY时钟设置
此参考时钟有两个来源:
- 芯片内部CRG配置以下寄存器和信号,PCIe PHY将采用芯片内部提供的100MHz时钟作为参考时钟。
- PCIE_REFCLK_SEL信号下拉。
- CRG控制寄存器PERI_CRG_PLL3734 [12]设置为1’b0,选择PHY参考时钟为100MHz;
- CRG控制寄存器PERI_CRG_PLL3734 [1]设置为1’b0,撤销PHY的test接口的复位;
- CRG控制寄存器PERI_CRG_PLL3734 [0]设置为1’b0,撤销PHY Core的复位;
当 PCIe采用内部CRG提供参考时钟时,PCIE_REFCLK_P/PCIE_REFCLK_M管脚可以设置为输出模式,用来给外部PCIe设备提供参考时钟。
- 配置以下寄存器可以由PCIE_REFCLK_P/PCIE_REFCLK_M输出PCIe参考时钟:
- CRG控制寄存器PERI_CRG3730 [2:0]设置为3’b000,从PCIE_REFCLK_P/PCIE_REFCLK_M管脚输出PCIe参考时钟。
- 外部PCIe差分时钟管脚输入
- 配置PCIE_REFCLK_SEL管脚上拉,PCIe PHY将采用PCIE_REFCLK_P/PCIE_REFCLK_M管脚的差分输入时钟作为PCIe PHY的参考时钟。
注意:当通过PCIE_REFCLK_P/PCIE_REFCLK_M输入参考时钟时,外供参考时钟源须保证频偏在±300ppm内。
PCIe控制器软复位控制
软件可通过 CRG寄存器中的PERI_CRG_PLL3728寄存器来控制PCIe复位,请参考CRG寄存器中关于PERI_CRG_PLL3728寄存器的描述。
使能PCIe控制器
按如下步骤使能PCIe控制器:
通过向PCIe内部系统控制寄存器PCIE_SYS_CTRL7[pcie_app_ltssm_enable]写入0,关闭PCIe控制器。
通过PCIE_REFCLK_SEL管脚的上下拉状态及CRG寄存器PERI_CRG_PLL3734设置COMBPHY的时钟。
通过CRG寄存器PERI_CRG_PLL3728设置打开 PCIe控制器的时钟。
通过PCIe内部系统控制寄存器中的PCIE_SYS_CTRL0[pcie_device_type] 寄存器设置PCIe控制器的工作模式(RC模式/EP模式)。
通过CRG寄存器PERI_CRG_PLL3728复位 PCIe控制器。
- 设置PERI_CRG_PLL3728[25:24] 为2’b00,设置对应COMBPHY的复位由PCIe控制器控制;
- 设置PERI_CRG_PLL3728 [2:0]为3’b111,复位PCIe控制器;
通过CRG寄存器PERI_CRG_PLL3728 [2:0]配置为3’b000,撤销 PCIe控制器的复位。
当工作在RC模式时,需要配置控制器的类代码寄存器(CLASS Code Register)为0x060400(对应为PCI到PCI桥设备)。PCIe控制器的类代码寄存器位于PCIe配置寄存器空间内。
通过向PCIe内部系统控制寄存器PCIE_SYS_CTRL7[pcie_app_ltssm_enable]写入1,使能PCIe控制器。PCIe控制器使能后,PCIe控制器开始链路建立过程。
----结束
须知
在没有初始化好相关的PCIe内部系统控制寄存器之前不要使能PCIe控制器。
链路初始化和定向是配置和初始化设备物理层、端口和相关链路的物理层的过程,使链路可以传输正常的数据包流量。链路的建立均是由硬件自动完成的,完成PCIe控制器的初始化和使能后,PCIe链路的建立自动发起,无需软件参与。
PCIe控制器与对端设备之间的连接未建立,不可向对端设备发起任何PCIe事务(软件不可访问PCIe对端设备)。
软件通过查询PCIe内部系统控制寄存器PERI_PCIE_STAT[pcie_rdlh_link_up]可以确定PCIe控制器是否已与对端设备建立连接。
请参考PCIe内部系统控制器中关于PERI_PCIE_STAT寄存器的定义。
发起PCIe事务
通过本地总线接口,可以由CPU发起总线读写操作,经地址转换单元转换为对应的PCIe事务。
配置事务
只有在RC模式下才可以发起配置事务。
由13.7.5.5 地址转换一节中可知,PCIe控制器的配置事务地址空间为0x20000000~0x2FFFFFFF。
PCIe控制器的地址转换单元负责将在0x20000000~0x2FFFFFFF地址范围内的本地总线操作转换为对应的PCIe配置事务。
CPU在本地总线上发起总线读/写请求,且总线地址各字段组成如图14-56配置,就可由PCIe 控制器发出配置读/写事务。

其中:
- BUS_ID:配置事务的目标总线号。
- DEV_ID:配置事务的目标设备号。
- FUN_ID:配置事务的目标功能号。
- REG_NUM:配置事务的目标寄存器号
须知
PCIe控制器中的ATU应该实现类型0和类型1配置事务转换区(CFG TYPE0 & CFG TYPE 1),以实现发起类型0和类型1的配置事务。设置参考如下:
假设PCIe控制器的总线号为I,下一级设备总线号为J(J=I+1),总线号为J的总线下一级总线号为K(K=I+2)。
按照PCIe协议,由PCIe控制器对总线号为J的总线发起的配置操作为类型0的配置事务,对总线号大于J的总线发起的配置操作为类型1的操作。
因此需创建一个地址转换区,实现由本地总线地址0x20J00000~0x20JFFFFF转换为类型0配置操作的地址转换区域;同时创建一个地址转换区,实现由本地总线地址0x20K00000~0x2FFFFFFF转换为类型1配置事务的地址转换区域。
存储器事务
RC和EP模式下,CPU在存储器事务地址空间内发起的总线读/写操作将转化为PCIe总线上的PCIe存储器读/写事务。PCIe控制器增加扩展存储器事务本地地址空间,支持本地地址空间映射为PCIe协议所定义的存储器事务的地址空间。
CPU在本地总线上发起读/写请求,且总线地址各字段组成如图14-57和图14-58配置,就可由PCIe控制器发起存储器读/写事务。PCIe控制器存储器事务本地地址字段定义


使用DMA传输
PCIe控制器内含一个DMA控制器,DMA控制器包含有两个DMA通道(一个DMA读通道和一个DMA写通道)。PCIe控制器内包含的DMA控制器用于大数据量存储器读写事务,以提高数据搬移的效率。
通过配置DMA控制寄存器能够实现DMA读通道和DMA写通道的全双工工作,即DMA读操作和DMA写操作可以同时进行。
DMA控制寄存器
软件可通过DMA控制寄存器来配置DMA传输,也可以通过DMA控制寄存器启动和停止DMA传输。DMA控制寄存器位于PCIe控制器的配置寄存器空间内,DMA控制寄存器的定义请参考本章的PCIe寄存器描述。
须知
为了减少DMA控制寄存器占用的配置寄存器空间,部分DMA控制寄存器地址是DMA读通道和DMA写通道共用。当需要配置这部分寄存器时,软件需要先通过配置DMA通道索引寄存器(DMA_CH_INDEX)以表明后续对这些寄存器的操作对象是写通道控制寄存器还是读通道控制寄存器。
这部分DMA控制寄存器包含:
1.DMA_CH_CTRL寄存器
2.DMA_TRANS_SIZE寄存器
3.DMA_SAR_LOW和DMA_SAR_HIGH寄存器
4.DMA_DAR_LOW和DMA_DAR_HIGH寄存器
例如:软件要设置DMA读通道的DMA传输长度为1024Byte,需按如下顺序操作:
软件设置DMA_CH_INDEX [ch_dir]=1,表明后续操作目标寄存器为读通道控制寄存器。
软件设置DMA_TRANS_SIZE=0x400,表明传输长度为1024Byte。
DMA读写通道使能
DMA通道在系统复位后默认是没有使能的,要使用PCIe的DMA通道,需使能DMA的读写通道。
- 通过设置DMA_RD_ENGINE_EN [dma_rd_engine_en]为1,使能DMA读通道。
- 通过设置DMA_WR_ENGINE_EN [dma_wr_engine_en]为1,使能DMA写通道。
DMA源地址和目标地址
DMA写:源地址(SAR)为本地内存空间,目标地址(DAR)为对端设备内存空间。
DMA读:源地址(SAR)为对端设备内存空间,目标地址(DAR)为本地内存空间。
配置DMA读或写通道的DMA_SAR_LOW和DMA_SAR_HIGH寄存器可以指定DMA传输的源地址,配置DMA读或写通道的DMA_DAR_LOW和DMA_DAR_HIGH寄存器可以指定DMA传输的目的地址。DMA源地址和目的地址寄存器请参看PCIe DMA控制寄存器定义。
DMA传输过程中,源地址和目的地址寄存器随着传输过程而递增。可以通过读取源地址和目的地址寄存器的值来确定DMA当前传输所获取数据的源地址和当前所写数据的目标地址。
DMA源地址和DMA目的地址都是双字节对齐的,因此最低两比特都必须设置为0。在传输过程中此最低两比特也一直为0。
DMA传输长度
DMA读或写操作的传输长度由DMA读或写通道的DMA_TRANS_SIZE寄存器来指定。该寄存器的值表示DMA请求传输的数据的字节数。在DMA传输过程,此寄存器的值会随着传输过程递减,可以通过读取此寄存器确定当前还有多少字节未传输。传输成功结束后此寄存器值应该为0。
DMA传输长度取值范围为:最小为1个字节,最大4G字节。
启动DMA传输
在配置好DMA读通道的控制寄存器之后,通过向DMA_RD_DOORBELL [rd_doorbell_num]写入0,启动DMA读传输。
在配置好DMA写通道的控制寄存器之后,通过向DMA_WR_DOORBELL [wr_doorbell_num]写入0,启动DMA写传输。
停止DMA传输
在DMA传输过程中如果需要停止DMA传输,可以通过如下寄存器控制来手动停止DMA读或者DMA写传输:
- 通过向DMA_RD_DOORBELL [dma_rd_stop]写入1,停止DMA读传输。
- 通过向 DMA_WR_DOORBELL [dma_wr_stop]写入1,停止DMA写传输。
如果DMA传输过程中没有发生错误,DMA传输将在所有的数据传输完成后自动停止。
DMA中断
DMA通道产生两种中断:
- 完成中断:表明DMA成功的完成了一次DMA传输。
- 中止中断:表明DMA传输不成功,或者传输过程中出现了错误。
DMA读和DMA写通道共用同一个中断,CPU接收到PCIe DMA本地中断后,通过查询DMA_RD_INT_STAT和DMA_WR_INT_STAT寄存器来确定是DMA读通道中断还是DMA写通道中断,以及是DMA完成中断还是DMA中止中断。请参考PCIe DMA寄存器中关于DMA_RD_INT_STAT和DMA_WR_INT_STAT的描述。
通过DMA_RD_INT_STAT和DMA_WR_INT_STAT寄存器,可以清除对应读或写通道的完成或中止中断。请参考寄存器DMA_RD_INT_CLR和DMA_WR_INT_CLR的描述。
地址转换
地址空间
芯片中PCIe控制器使用四个地址空间:
- PCIe内部配置寄存器空间:CPU通过此空间可以访问PCIe控制器的配置寄存器。
- PCIe内部系统控制寄存器空间:CPU通过此空间可以访问PCIe控制器的系统控制寄存器。
- 配置事务地址空间:CPU通过此空间可发起PCIe配置读写事务。
- 存储器事务地址空间:CPU通过此空间可发起PCIe存储器或IO事务。
PCIe控制器使用的四个地址空间如表14-24所示。
| 地址空间类型 | 大小 | 起始地址 | 结束地址 | 说明 |
|---|---|---|---|---|
| PCIe内部配置寄存器空间 | 3K | 0x103D0000 | 0x103D0BFF | 此空间为PCI Express协议所定义的配置寄存器空间和PCIe 内部系统控制寄存器空间。 |
| PCIe内部系统控制寄存器空间 | 1K | 0x103D0C00 | 0x103D0FFF | 此空间为PCI Express 内部系统控制寄存器空间。 |
| 配置事务地址空间 | 256M | 0x020000000 | 0x02FFFFFFF | 在此空间内的读写操作将在PCIe链路上转化为PCIe协议所定义的类型0配置事务或者类型1配置事务(需地址转换功能配合,地址转换功能请参考地址转换单元ATU(Address Translation Unit ))。 |
| 存储器事务地址空间 | 256M | 0x030000000 | 0x03FFFFFFF | 在此空间内的读写操作将在PCIe链路上转换为PCIe协议所定义的存储器读写事务(需地址转换功能配合,地址转换功能请参考地地址转换单元ATU(Address Translation Unit ))。 |
| 扩展存储器事务地址空间 | 4G | 0x300000000 | 0x3FFFFFFFF | 支持大地址空间扩展为PCIe存储器事务地址空间。在此空间内的读写操作将在PCIe链路上转换为PCIe协议所定义的存储器读写事务(需地址转换功能配合,地址转换功能请参考地址转换单元ATU(Address Translation Unit ))。 |
在上述地址空间中,所有的地址空间都是指本地总线地址。
CPU对上述地址空间的访问,除了“PCIe内部配置寄存器空间”和“PCIe内部系统控制寄存器空间”是针对的PCIe控制器自身,对其余地址空间的访问都是针对的与PCIe控制器建立连接的对端设备。对与PCIe控制器建立连接的对端设备的访问可以通过地址转换单元(ATU)实现事务转换和地址转换的功能,具体见“地址转换单元ATU(Address Translation Unit )”章节。
此外,在需要PCIe控制器发起IO事务的时候,“配置事务地址空间”和“存储器事务地址空间”中未被使用的地址都可以通过地址转换单元的配合,发起PCIe IO事务。
地址转换单元ATU(Address Translation Unit )
芯片中提供了地址转换单元(ATU)用来实现事务转换和地址转换的功能。
在系统上电复位之后,ATU功能未启用,不能实现事务转换和地址转换的功能。此时PCIe控制器采用默认设置,将本地总线上的发起的地址在配置事务空间或存储器事务空间内的操作都转换为PCIe总线上相同地址值的存储器事务,PCIe控制器无法发起配置事务或者IO事务,也无法实现地址转换的功能。
要使PCIe控制器能够发出配置事务或者IO事务,或者实现地址转换功能,必须通过ATU配置寄存器设置地址转换区域,具体可见“ATU控制寄存器”章节。
地址转换单元按发送方向和接收方向各提供了8个地址转换区,每一个区可单独实现某一种事务类型和地址转换功能。其中,发送方向用于将对本地总线地址上的读写操作转换为PCIe总线地址上的PCIe事务,接收方向用于将PCIe总线地址上的PCIe事务转换为本地总线地址上的读写操作。
发送方向地址转换单元(outbound ATU)的功能示例如图14-59所示,本地总线地址(即Original address)如果在地址转换区Region A的范围内,则地址转换单元将对此本地总线地址的访问转换为PCIe总线地址(即Translated Address)上的PCIe事务(如CFG事务,MEM事务)。

接收方向地址转换单元(inbound ATU)的功能示例如图14-60所示,接收方向接收到的PCIe事务经地址转换区A或B转换后,可将对应的PCIe事务转换为对本地总线地址Translated Address 1或Translated Address 2的访问,比如,假设Translated Address 1为本地DDR内存地址,则可将从PCIe总线上接收到的满足地址转换区域条件的PCIe事务转化为对本地DDR的访问。

ATU控制寄存器
地址转换单元在系统复位后默认是未使能的,因此在系统复位后,需根据需要对地址转换单元进行配置。在PCIe内部配置寄存器空间提供了一系列寄存器接口用以配置地址转换单元(ATU)。通过这一组寄存器,可以实现对发送方向和接收方向的各8个地址转换区的配置。
ATU配置步骤如下:
设置ATU_VIEWPORT,选择地址转换区编号和转换方向。
设置ATU_BASE_LOW和 ATU_BASE_HIGH。
设置 ATU_LIMIT。
设置 ATU_TARGET_LOW和 ATU_TARGET_HIGH。
设置ATU_REGION_CTRL1。
设置ATU_REGION_CTRL2,使能此ATU Region。
----结束
须知
为了减少ATU控制寄存器占用的配置寄存器空间,发送方向和接收方向的各8个ATU区域都是由同一组寄存器来配置,当需要对其中一个ATU区域进行配置时,必须先设置ATU_VIEWPORT寄存器选择转换区域编号,以表明后续对ATU寄存器的操作是针对哪一个ATU区域的ATU控制寄存器。
例如:当需要将发送方向的ATU区域3设置为一个地址转换区域并使之有效,需按如下步骤设置:
1.设置ATU_VIEWPORT [atu_reg_region_dir]=0x0,表明操作对象是发送方向的ATU区域寄存器。
2.设置ATU_VIEWPORT [atu_reg_region_index]=0x3,表明操作对象是发送方向的ATU区域3。
3.按此ATU区域特性设置其他的ATU寄存器。
ATU设置示例如下:
假设两片芯片通过PCIe连接,一片做RC,另一片做EP。RC端的CPU对当地总线地址0x28000000~0x2800FFFF的访问,经过PCIe后,变成对EP端DDR 地址0x90000000~0x9000FFFF的访问。要求:
- 对应PCIe事务为地址0x50000000~0x5000FFFF上的存储器事务;
- 存储器事务在EP端做BAR匹配,且BAR编号为4。
整个访问流程如图14-61所示。

- RC端寄存器的配置直接由RC端CPU发起总线操作完成,EP端寄存器的配置由RC端CPU发起总线操作,经RC转换为PCIe配置事务完成,所以RC端需要首先设置一个转换区域,将RC端CPU发起的总线操作转换成PCIe配置事务。
- RC端需要设置发送方向地址转换区域,将当地总线地址0x280000000x2800FFFF上的操作转换成PCIe总线地址0x500000000x5000FFFF上的存储器事务。
- EP端需要设置接收方向地址转换区域,将PCIe总线地址0x500000000x5000FFFF上的存储器事务转换成对EP端DDR地址0x900000000x9000FFFF的访问。
具体寄存器配置流程如下所述:
RC端发送方向配置事务转换区域设置,直接由RC端CPU发起总线操作完成。由于两片芯片直接连接,故RC对EP的配置需发起总线号为1的类型0配置事务。根据13.7.5.3,可选取的RC端总线侧起始地址为0x20100000,假设选取转换区域0,具体的寄存器配置如下:
向ATU_VIEWPORT寄存器写入0x00000000,选择区域号为0,方向为输出;
向ATU_BASE_LOW寄存器写入0x20100000,ATU_BASE_HIGH寄存器写入0x00000000,ATU_LIMIT寄存器写入0x201FFFFF,设置总线侧地址转换范围为0x20100000~0x201FFFFF;
向ATU_REGION_CTRL1寄存器写入0x00000004,设置事务转换类型为类型0配置事务;
向ATU_REGION_CTRL2寄存器写入0x90000000,使能配置事务移位功能,将未转换的地址的bit[27:12]赋值给转换后地址的bit[31:16],并使能该地址转换区域。
通过以上配置,RC端0x20100000~0x201FFFFF地址上的本地总线访问就可以转换成总线号为1的类型0配置事务,可以访问EP端的PCIe内部配置寄存器。
RC端发送方向存储器事务转换区域设置,直接由RC端CPU发起总线操作完成。将RC端CPU对本地总线地址0x280000000x2800FFFF的访问转换成PCIe总线0x500000000x5000FFFF地址上的PCIe存储器事务,假设选取转换区域1,具体的寄存器配置如下:
向ATU_VIEWPORT寄存器写入0x00000001,选择区域号为1,方向为输出;
向ATU_BASE_LOW寄存器写入0x28000000,ATU_BASE_HIGH寄存器写入0x00000000,ATU_LIMIT寄存器写入0x2800FFFF,设置总线侧地址转换范围为0x28000000~0x2800FFFF;
向ATU_TARGET_LOW寄存器写入0x50000000,ATU_TARGET_HIGH寄存器写入0x00000000,设置地址转换目标地址为0x50000000;
向ATU_REGION_CTRL1寄存器写入0x00000000,设置事务转换类型为存储器事务;
向ATU_REGION_CTRL2寄存器写入0x80000000,使能该地址转换区域。
EP端接收方向转换区域设置,由RC端CPU发起总线操作,经RC转换为PCIe配置事务完成。将0x50000000~0x5000FFFF地址范围内的的存储器事务转换成EP端0x90000000~0x9000FFFF地址上的本地总线访问, PCIe事务地址匹配BAR4(需提前由RC通过PCIe配置事务向EP的BAR4写入0x50000000),假设选取转换区域2,具体的寄存器配置如下:
向ATU_VIEWPORT寄存器写入0x80000002,选择区域号为2,方向为输入;
向ATU_TARGET_LOW寄存器写入0x90000000,ATU_TARGET_HIGH寄存器写入0x00000000,设置地址转换目标地址为0x90000000;
向ATU_REGION_CTRL1寄存器写入0x00000000,设置事务转换类型为存储器事务;
向ATU_REGION_CTRL2寄存器写入0xC0000400,设置为BAR匹配模式,BAR编号为4,并使能该地址转换区域。
----结束
通过以上配置,PCIe总线上0x50000000~0x5000FFFF地址范围内的的存储器事务就可以转换成EP端0x90000000~0x9000FFFF地址上的本地总线访问。
INTx中断机制
PCIe控制器支持基于消息(Message)的INTx中断机制。
PCIe控制器作为EP时,只支持INTA的中断上报。
- 将PCIE_SYS_CTRL7[pcie_sys_int]寄存器从0配置为1时,EP向RC发送Assert_INTA的消息,触发RC产生INTx中断(PCIE_INTA、PCIE_INTB、PCIE_INTC或PCIE_INTD)
- 将PCIE_SYS_CTRL7[pcie_sys_int]寄存器从1配置为0时,EP向RC发送Deassert_INTA的消息,触发RC清除INTx中断(PCIE_INTA、PCIE_INTB、PCIE_INTC或PCIE_INTD)
须知
- PCIe控制器作为EP时,只能产生INTA的中断。PCIe控制器作为RC时,可以接收触发INTA、INTB、INTC和INTD四种中断。
- PCIe EP的INTx消息经过PCIe桥设备向上一级设备传递时,PCIe桥设备会根据消息的Request ID,重新映射INTx消息。
MSI中断机制
PCIe协议规定了MSI中断机制,EP设备通过向RC发送一个特定的MEM写事务。该MEM写事务的TLP报文,具有指定地址(Message Address)和特定数据(Message Data)。RC只要检测到MSI事务的特定报文,就会触发PCIE_MSI_INT中断上报CPU。
MSI中断机制通过EP的MEM写事务,实现了EP向RC上报中断。
MSI报文产生
PCIe控制器作为EP时,产生MSI报文,并上报RC进行处理。MSI报文的本质也是一个具有指定地址(Message Address)和特定数据(Message Data)的Memory Write报文。
须知
PCIe协议标准寄存器定义了MSI Capability寄存器,用于存放Message Address和Message Data。协议标准寄存器具体含义请参考《PCI Express Base Specification 3.0》章节7和《PCI Local Bus Specification, Revision 3.0》章节6,此处不做详细描述。
PCIe控制器支持两种MSI报文发送方式:MEM写事务发送MSI报文和快速MSI报文发送。
- MEM写事务发送MSI报文,使用MEM写事务发送MSI报文是最基本的方式。
首先CPU获取MSI Capability寄存器中的Message Address和Message Data信息。之后CPU发起一次对Message Address的MEM写操作,写入数据为Message Data。这样,PCIe总线上会发出一个MSI报文。MSI报文结构如图14-62所示。

- 快速MSI报文发送,PCIe控制器支持快速MSI报文发送方式。
- 配置PCIE_SYS_CTRL2[pcie_ven_msi_vector]设置发送的MSI中断向量。
- 配置PCIE_SYS_CTRL2[pcie_ven_msi_req]为1时,发送一次MSI报文
须知
Message Address定义的地址是PCIe域的地址。如果CPU直接发起MEM写事务,需要将CPU域的地址转换为PCIe域的地址。关于CPU域地址到PCIe域地址转换的设置,参考PCIe地址转换章节。
使用快速MSI报文发送的方式,配置PCIE_SYS_CTRL2[pcie_ven_msi_req]为1发送一次MSI报文后。如果需要第二次发送MSI报文,必须先将PCIE_SYS_CTRL2[pcie_ven_msi_req]配置为0,再写为1时,才能再次发送MSI报文。
快速MSI报文发送的方式,只要将PCIE_SYS_CTRL2[pcie_ven_msi_req]配置1就会立刻发送MSI报文,优先于其他的MEM写事务。这种方式仅适用于MSI事务与其他MEM写事务之间不需要严格保序的情况。
MSI中断管理
PCIe控制器作为RC时,提供了一个MSI中断管理单元,负责处理接收到的MSI报文,并产生MSI中断(EP模式下,MSI中断管理单元不生效)。
MSI中断管理单元中包含8个EP节点的中断管理子单元,每个EP最多支持32个中断向量。MSI中断管理单元会解析收到TLP报文中的Data Payload(包括Address和Data),以确定该TLP报文是否是MSI报文,及该MSI报文属于哪一个EP和对应的中断向量。
- 当RC需要接收EP发送的MSI报文(MEM写事务)时,需要配置PCIe协议标准寄存器Command[MEM_SPACE_EN],使能Memory空间访问。
- 使能PCIe控制器的MSI中断管理单元,用于管理接收到的MSI报文。MSI中断管理单元检测收到的TLP报文,并检查到报文的地址与设定的Message Address匹配及满足其他匹配时,则会产生一个MSI中断。该报文被MSI中断管理单元处理后,不会再向PCIe控制器外的系统总线发送,仅用于PCIe控制器内部触发MSI中断。
软件可通过MSI中断管理单元寄存器来配置MSI中断管理,管理上报的MSI报文,MSI中断管理单元寄存器的定义请参考本章的PCIe寄存器描述。
须知
PCIe协议仅规定了EP的MSI报文上报方式,并未对RC的MSI中断管理作出规定。Message Address由RC统一分配管理,并且需要保证EP的Message Address和RC的MSI中断管理单元MSI_CTRL_ADDR_LOW和MSI_CTRL_ADDR_HIGH寄存器中设置的地址保持一致。Message Data用于表征对应的EP信息及中断向量,并与子单元及子单元的中断使能bit位、中断掩码bit位进行匹配。
MSI中断管理示例如下:
- 初始化RC MSI中断管理单元,配置Message Address、中断使能bit位、中断掩码bit位;
- MSI中断管理单元自动解析报文,并识别MSI报文。当检测到MSI报文时,产生PCIE_MIS_INT中断;
- CPU检测到PCIe控制器上报的PCIE_MSI_INT中断,读取MSI中断管理单元的MSI_CTRL_INT_STATUS寄存器,查询中断并作相应的中断处理;
- CPU处理完中断后,写MSI中断管理单元的MSI_CTRL_INT_STATUS寄存器,清除PCIE_MSI_INT中断。
MSI多中断向量
PCIe控制器作为RC时,支持对8×32个中断向量进行管理;PCIe控制器作为EP时,每个EP设备最多支持32个中断向量。
- RC的MSI中断管理单元中包含8个EP节点的中断管理子单元,每个EP最多支持32个中断向量。MSI中断管理单元,通过解析MSI报文的MSI Message Data。使用MSI Message Data[7:5]指示对应的EP信息,对应MSI中断管理单元下的8个不同MSI中断管理子单元。使用MSI Message Data[4:0]指示MSI中断向量,分别对应一个MSI中断管理子单元中MSI_CTRL_INT_EN、MSI_CTRL_INT_MASK、MSI_CTRL_INT_STATUS的32bit。
- EP的MSI Capability寄存器定义了多中断向量的能力。通过读取MSI Capability寄存器的Message Control[Multiple Message Capable]获取EP支持的MSI多中断向量的能力信息,并配置Message Control[Multiple Message Enable]使能MSI多中断特性。
EP使能Multiple Message Enable功能后,Message Data寄存器[4:0]需要写0。使用PCIE_SYS_CTRL2[pcie_ven_msi_vector]指示中断向量。Message Data寄存器[7:5]指示对应的EP信息。发送的MSI消息中的MSI Message Data={Message Data[15:5],PCIE_SYS_CTRL2[pcie_ven_msi_vector]}组合而成。
MSI多中断向量示例
配置EP多中断向量,步骤如下:
说明
Message Control请参考MSI报文产生中注意内容。
EP读取Message Control[Multiple Message Capable]返回值为0x5,即支持32个中断向量。
EP配置Message Control[Multiple Message Enable]为0x5,即使能32个中断向量。
EP配置Message Address为0x90000000和Message Upper Address为0x0,即分配MSI地址为0x90000000。
EP配置Message Data为0x1220,其中[4:0]bit为0x0,[7:5]bit为0x1,即分配的EP编号为1。
EP配置Message Control[Message Enable]为1,即EP使能MSI中断。
----结束
配置RC使能MSI中断管理单元,步骤如下:
RC配置MSI中断管理单元,配置MSI_CTRL_ADDR_LOW为0x90000000和MSI_CTRL_ADDR_HIGH为0x0,即MSI中断管理单元的MSI地址为0x90000000。
RC配置MSI中断管理子单元,由于EP编号为1,MSI_CTRL_INT_EN和MSI_CTRL_INT_MASK对应的偏移地址为0x834和0x838。配置MSI_CTRL_INT_EN为全1,配合MSI_CTRL_INT_MASK为全0。即使能MSI中断管理编号为1子单元,中断使能,并且不屏蔽中断。
----结束
EP产生MSI报文的两种方法:
- EP发起MEM写事务,向0x90000000(PCIe域的地址)写入0x1234,即发送MSI报文,MSI中断向量为0x14,EP编号为1;
- EP配置PCIE_SYS_CTRL2[pcie_ven_msi_vector]为0x14,即中断向量为0x14,并向PCIE_SYS_CTRL2[pcie_ven_msi_req]写入1,快速发送MSI报文。
RC MSI中断上报:
- RC触发PCIE_MSI_INT中断上报CPU,读取MSI中断管理编号为1子单元的0x83C的MSI_CTRL_INT_STATUS,其中[20]bit为1,即RC端收到编号为1的EP设备,中断向量为0x14的MSI中断。
- RC向0x83C的MSI_CTRL_INT_STATUS[20]bit写入1,清除PCIE_MSI_INT中断。
PCI Express控制器寄存器
PCIE寄存器包括协议标准寄存器和厂商自定义寄存器。
- PCIE做EP时,协议标准寄存器(TYPE0)地址分配如下(PCIe基址是0x0_103D_0000):
| bit[31:24] | bit[23:16] | bit[15:8] | bit[7:0] | BYTE_OFFSET |
|---|---|---|---|---|
| Device ID | Vendor ID | 0x0 | ||
| Status | Command | 0x4 | ||
| Class Code | Revision ID | 0x8 | ||
| BIST | Header Type | Master Latency Timer | Cache Line Size | 0xC |
| Base Address Register 0(BAR0) | 0x10 | |||
| Base Address Register 1(BAR1) | 0x14 | |||
| Base Address Register 2(BAR2) | 0x18 | |||
| Base Address Register 3(BAR3) | 0x1C | |||
| Base Address Register 4(BAR4) | 0x20 | |||
| Base Address Register 5(BAR5) | 0x24 | |||
| Cardbus CIS Pointer | 0x28 | |||
| Subsystem ID | Subsystem Vendor ID | 0x2C | ||
| Expansion ROM Base Address | 0x30 | |||
| Reserved | Capabilities Pointer | 0x34 | ||
| Reserved | 0x38 | |||
| Reserved | Interrupt Pin | Interrupt Line | 0x3C | |
| Power Management Capabilities | Next Capability Pointer | Capability ID(PM) | 0x40 | |
| Power Management Status/Control Register | 0x44 | |||
| Reserved | 0x48 | |||
| Reserved | 0x4C | |||
| Message Control | Next Capability Pointer | Capability ID(MSI) | 0x50 | |
| Message Address | 0x54 | |||
| Message Upper Address | 0x58 | |||
| Reserved | Message Data | 0x5C | ||
| Reserved | 0x60 | |||
| Reserved | 0x64 | |||
| Reserved | 0x68 | |||
| Reserved | 0x6C | |||
| PCIE Capabilities Register | Next Capability Pointer | Capability ID(Capability) | 0x70 | |
| Device Capabilities | 0x74 | |||
| Device Status | Device Control | 0x78 | ||
| Link Capabilities | 0x7C | |||
| Link Status | Link Control | 0x80 | ||
| Reserved | 0x84 | |||
| Reserved | 0x88 | |||
| Reserved | 0x8C | |||
| Reserved | 0x90 | |||
| Device Capabilities 2 | 0x94 | |||
| Device Status 2 | Device Control 2 | 0x98 | ||
| Link Capabilities 2 | 0x9C | |||
| Link Status 2 | Link Control 2 | 0xA0 | ||
| Advanced Error Reporting Extended Capability Header | 0x100 | |||
| Uncorrectable Error Status Register | 0x104 | |||
| Uncorrectable Error Mask Register | 0x108 | |||
| Uncorrectable Error Severity Register | 0x10C | |||
| Correctable Error Status Register | 0x110 | |||
| Correctable Error Mask Register | 0x114 | |||
| Advanced Error Capabilities and Control Register | 0x118 | |||
| Header Log Register | 0x11C | |||
| 0x120 | ||||
| 0x124 | ||||
| 0x128 | ||||
| Reserved | 0x12C | |||
| Reserved | 0x130 | |||
| Reserved | 0x134 | |||
| TLP Prefix Log Register | 0x138 |
- PCIE做RC时,协议标准寄存器(TYPE1)地址分配如下(PCIe基址是0x0_103D_0000):
| bit[31:24] | bit[23:16] | bit[15:8] | bit[7:0] | BYTE_OFFSET |
|---|---|---|---|---|
| Device ID | Vendor ID | 0x0 | ||
| Status | Command | 0x4 | ||
| Class Code | Revision ID | 0x8 | ||
| BIST | Header Type | Master Latency Timer | Cache Line Size | 0xC |
| Reserved | 0x10 | |||
| Reserved | 0x14 | |||
| Secondary Latency Timer | Subordinate Bus Number | Secondary Bus Number | Primary Bus Number | 0x18 |
| Secondary Status | I/O Limit | I/O Base | 0x1C | |
| Memory Limit | Memory Base | 0x20 | ||
| Prefetchable Memory Limit | Prefetchable Memory Base | 0x24 | ||
| Prefetchable Base Upper 32 Bits | 0x28 | |||
| Prefetchable Limit Upper 32 Bits | 0x2C | |||
| I/O Limit Upper 16 Bits | I/O Base Upper 16 Bits | 0x30 | ||
| Reserved | Capabilities Pointer | 0x34 | ||
| Expansion ROM Base Address | 0x38 | |||
| Bridge Control | Interrupt Pin | Interrupt Line | 0x3C | |
| Power Management Capabilities | Next Capability Pointer | Capability ID(PM) | 0x40 | |
| Power Management Status/Control Register | 0x44 | |||
| Reserved | 0x48 | |||
| Reserved | 0x4C | |||
| Message Control | Next Capability Pointer | Capability ID(MSI) | 0x50 | |
| Message Address | 0x54 | |||
| Message Upper Address | 0x58 | |||
| Reserved | Message Data | 0x5C | ||
| Reserved | 0x60 | |||
| Reserved | 0x64 | |||
| Reserved | 0x68 | |||
| Reserved | 0x6C | |||
| PCIE Capabilities Register | Next Capability Pointer | Capability ID(Capability) | 0x70 | |
| Device Capabilities | 0x74 | |||
| Device Status | Device Control | 0x78 | ||
| Link Capabilities | 0x7C | |||
| Link Status | Link Control | 0x80 | ||
| Slot Capabilities | 0x84 | |||
| Slot Status | Slot Control | 0x88 | ||
| Root Capabilities | Root Control | 0x8C | ||
| Root Status | 0x90 | |||
| Device Capabilities 2 | 0x94 | |||
| Device Status 2 | Device Control 2 | 0x98 | ||
| Link Capabilities 2 | 0x9C | |||
| Link Status 2 | Link Control 2 | 0xa0 | ||
| Advanced Error Reporting Extended Capability Header | 0x100 | |||
| Uncorrectable Error Status Register | 0x104 | |||
| Uncorrectable Error Mask Register | 0x108 | |||
| Uncorrectable Error Severity Register | 0x10C | |||
| Correctable Error Status Register | 0x110 | |||
| Correctable Error Mask Register | 0x114 | |||
| Advanced Error Capabilities and Control Register | 0x118 | |||
| Header Log Register | 0x11C | |||
| 0x120 | ||||
| 0x124 | ||||
| 0x128 | ||||
| Root Error Command | 0x12C | |||
| Root Error Status | 0x130 | |||
| Error Source Identification Register | Correctable Error Source Identification Register | 0x134 | ||
| TLP Prefix Log Register | 0x138 |
协议标准寄存器具体含义请参考《PCI Express Base Specification 3.0》章节7,此处不做详细描述。
下面只针对芯片中厂商定义的寄存器做详细描述。
PCIe_iATU寄存器概览
PCIe_iATU寄存器概览如表14-25所示。
PCIe_iATU寄存器概览(基址是0x0_103D_0000)
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x0900 | ATU_VIEWPORT | ATU区域号寄存器 | 14-202 |
| 0x0904 | ATU_REGION_CTRL1 | ATU区域控制寄存器 | 14-203 |
| 0x0908 | ATU_REGION_CTRL2 | ATU区域控制寄存器 | 14-205 |
| 0x090C | ATU_BASE_LOW | ATU基地址低位寄存器 | 14-208 |
| 0x0910 | ATU_BASE_HIGH | ATU基地址高位寄存器 | 14-209 |
| 0x0914 | ATU_LIMIT | ATU地址界限寄存器 | 14-209 |
| 0x0918 | ATU_TARGET_LOW | ATU目标地址低位寄存器 | 14-209 |
| 0x091C | ATU_TARGET_HIGH | ATU目标地址高位寄存器 | 14-210 |
PCIe_iATU寄存器描述
ATU_VIEWPORT
ATU_VIEWPORT为ATU区域号寄存器。
Offset Address: 0x0900 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31] | RW | atu_reg_region_dir | 区域方向。 表明是发送还是接收地址转换区域,与区域号配合使用以确定操作的具体ATU区域。 0:输出地址转换区域; 1:输入地址转换区域。 | 0x0 |
| [30:4] | RO | reserved | 保留。 | 0x0000000 |
| [3:0] | RW | atu_reg_region_index | 区域编号。 表明地址转换控制寄存器操作对应的区域号。 区域号赋值范围为0~7。 | 0x0 |
ATU_REGION_CTRL1
ATU_REGION_CTRL1为ATU区域控制寄存器。
Offset Address: 0x0904 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:23] | RO | reserved | 保留。 | 0x000 |
| [22:20] | RW | atu_reg_func_num | 功能号。 发送(Outbound):当发送的TLP(transaction layer packet)属于本ATU区域范围,则将该TLP数据包中功能号字段换成此寄存器的值。 接收(Inbound):当接收到的TLP包中与此寄存器值相对应的功能号的BAR地址匹配时,则对此接收的TLP做地址转换处理(仅当接收区域匹配模式为BAR地址匹配时)。 | 0x0 |
| [19:18] | RO | reserved | 保留。 | 0x0 |
| [17:16] | RW | atu_reg_at | AT字段。 发送(Outbound):当发送的TLP属于本ATU区域范围,则将该TLP数据包中AT字段换成此寄存器的值。 接收(Inbound):当接收到的TLP包中AT字段与此寄存器匹配,则对此接收的TLP做地址转换处理。 | 0x0 |
| [15:11] | RO | reserved | 保留。 | 0x00 |
| [10:9] | RW | atu_reg_attr | ATTR字段。 发送(Outbound):当发送的TLP属于本ATU区域范围,则将该TLP数据包中ATTR字段换成此寄存器的值。 接收(Inbound):当接收到的TLP包中ATTR字段与此寄存器匹配,则对此接收的TLP做地址转换处理。 | 0x0 |
| [8] | RW | atu_reg_td | TD字段。 发送(Outbound):当发送的TLP属于本ATU区域范围,则将该TLP数据包中TD字段换成此寄存器的值。 接收(Inbound):当接收到的TLP包中TD字段与此寄存器匹配,则对此接收的TLP做地址转换处理。 | 0x0 |
| [7:5] | RW | atu_reg_tc | TC字段。 发送(Outbound):当发送的TLP属于本ATU区域范围,则将该TLP数据包中TC字段换成此寄存器的值。 接收(Inbound):当接收到的TLP包中TC字段与此寄存器匹配,则对此接收的TLP做地址转换处理。 | 0x0 |
| [4:0] | RW | atu_reg_type | TYPE字段。 发送(Outbound):当发送的TLP属于本ATU区域范围,则将该TLP数据包中TYPE字段换成此寄存器的值。 接收(Inbound):当接收到的TLP包中TYPE字段与此寄存器匹配,则对此接收的TLP做地址转换处理。 | 0x00 |
ATU_REGION_CTRL2
ATU_REGION_CTRL2为ATU区域控制寄存器。
Offset Address: 0x0908 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31] | RW | atu_reg_region_enable | ATU区域使能。 0:不使能。 1:使能。 | 0x0 |
| [30] | RW | atu_reg_in_bar_match | 接收ATU匹配模式选择。 发送(Outbound):无作用。 接收(Inbound):选择接收MEM/IO数据包的匹配模式。 0:地址匹配模式:当接收到的MEM/IO TLP(transaction layer packet)地址在ATU_BASE_LOW/ ATU_BASE_HIGH与ATU_LIMIT范围内,则做地址转换。 1:BAR匹配模式:当接收到的MEM/IO TLP地址与BAR地址相匹配时,则做地址转换。 | 0x0 |
| [29] | RO | reserved | 保留。 | 0x0 |
| [28] | RW | atu_reg_shift | 配置事务移位功能。 此寄存器在做配置类型转换时使能,能实现操作地址和总线号、设备号、功能号的转换(以实现用256M地址空间访问所有配置空间的功能。)。 发送(Outbound):将未转换的地址的27~12比特赋值给转换后地址的31~16比特。 接收(Inbound):将接收到的配置事务的未转换的地址的31~16比特赋值给转换后地址的27~12比特。 0:不使能; 1:使能。 | 0x0 |
| [27] | RW | atu_reg_fuzzy | 模糊类型匹配模式。 若使能,则使能事务类型模糊匹配模式。 0:不使能; 1:使能。 | 0x0 |
| [26] | RO | reserved | 保留。 | 0x0 |
| [25:24] | RW | atu_reg_rsp_code | 完成状态代码: 必须设置为0。 | 0x0 |
| [23:22] | RO | reserved | 保留。 | 0x0 |
| [21] | RW | atu_reg_msgcode_match_en | 消息代码匹配使能。 发送(Outbound):未使用。 接收(Inbound):当使能时,则将接收到的TLP中的消息代码与ATU_REGION_CTRL2中的atu_reg_msg_code做匹配。 0:不使能; 1:使能。 | 0x0 |
| [20] | RO | reserved | 保留。 | 0x0 |
| [19] | RW | atu_reg_func_match_en | 功能号匹配使能。 发送(Outbound):未使用。 接收(Inbound):当使能时,则将接收到的TLP中的功能号与ATU_REGION_CTRL1中的atu_reg_func_num做匹配。 0:不使能; 1:使能。 | 0x0 |
| [18] | RW | atu_reg_at_match_en | AT字段匹配使能。 发送(Outbound):未使用。 接收(Inbound):当使能时,则将接收到的TLP中的AT字段与ATU_REGION_CTRL1中的atu_reg_at做匹配。 0:不使能; 1:使能。 | 0x0 |
| [17] | RO | reserved | 保留。 | 0x0 |
| [16] | RW | atu_reg_attr_match_en | ATTR字段匹配使能。 发送(Outbound):未使用。 接收(Inbound):当使能时,则将接收到的TLP中的ATTR字段与ATU_REGION_CTRL1中的atu_reg_attr做匹配。 0:不使能; 1:使能。 | 0x0 |
| [15] | RW | atu_reg_td_match_en | TD字段匹配使能。 发送(Outbound):未使用。 接收(Inbound):当使能时,则将接收到的TLP中的TD字段与ATU_REGION_CTRL1中的atu_reg_td做匹配。 0:不使能; 1:使能。 | 0x0 |
| [14] | RW | atu_reg_tc_match_en | TC字段匹配使能。 发送(Outbound):未使用。 接收(Inbound):当使能时,则将接收到的TLP中的TC字段与ATU_REGION_CTRL1中的atu_reg_tc做匹配。 0:不使能; 1:使能。 | 0x0 |
| [13:11] | RO | reserved | 保留。 | 0x0 |
| [10:8] | RW | atu_reg_bar_num | BAR编号。 发送(Outbound):未使用。 接收(Inbound):当接收到的TLP中的地址与此寄存器对应的BAR地址相匹配时,则对此TLP做地址转换处理。 000:BAR#0; 001:BAR#1; 010:BAR#2; 011:BAR#3; 100:BAR#4; 101:BAR#5; 其他:保留。 | 0x0 |
| [7:0] | RW | atu_reg_msg_code | 消息代码。 发送(Outbound):当发送的TLP地址与此区域匹配,且ATU_REGION_CTRL1中atu_reg_type字段为MSG,则将转换后的TLP中MSP字段设置为此寄存器的值。 接收(Inbound):当ATU_REGION_CTRL2中的atu_reg_msgcode_match_en使能时,且接收到的消息事务中消息代码与此寄存器值相匹配时,则对此事务包做地址转换处理。 | 0x00 |
ATU_BASE_LOW
ATU_BASE_LOW为ATU基地址低位寄存器。
Offset Address: 0x090C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:12] | RW | atu_reg_base_low | 表示此区域的起始地址中的31~12比特,当未转换的地址位于起始地址和地址界限范围内时,则满足地址匹配条件。ATU_BASE_LOW和ATU_BASE_HIGH共同组成基地址。 | 0x000 |
| [11:0] | RO | reserved | 保留。 | 0x0000 |
ATU_BASE_HIGH
ATU_BASE_HIGH为ATU基地址高位寄存器。
Offset Address: 0x0910 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | atu_reg_base_high | 基地址高32位。 此区域的起始地址的63-32比特,当未转换的地址位于起始地址和地址界限范围内时,则满足地址匹配条件。(此寄存器只在64比特地址下有效,32比特地址模式下需设置为0。) ATU_BASE_LOW和ATU_BASE_HIGH共同组成基地址。 | 0x00000000 |
ATU_LIMIT
ATU_LIMIT为ATU地址界限寄存器。
Offset Address: 0x0914 Total Reset Value: 0x0000_FFFF
| Bits | Access | Name | Description | Reset |
| [31:12] | RW | atu_reg_limit | 地址界限。 此区域的界限地址的中的31~12比特,当未转换的地址位于起始地址和地址界限范围内时,则满足地址匹配条件。 | 0x0000F |
| [11:0] | RO | reserved | 保留。 | 0xFFF |
ATU_TARGET_LOW
ATU_TARGET_LOW为ATU目标地址低位寄存器。
Offset Address: 0x0918 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:12] | RW | atu_reg_trgt_low | 当做地址转换时,转换后的地址的31~12比特。ATU_TARGET_LOW和ATU_TARGET_HIGH共同组成目标地址。 地址转换公式为: 转换后的地址=转换地址-基地址+目标地址。 转换后的地址=转换地址-基地址+目标地址。 | 0x0000_0000 |
| [11:0] | RO | reserved | 保留。 |
ATU_TARGET_HIGH
ATU_TARGET_HIGH为ATU目标地址高位寄存器。
Offset Address: 0x091C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | atu_reg_trgt_high | 目标地址高32位。 当做地址转换时,转换后的地址的63~32比特。ATU_TARGET_LOW和ATU_TARGET_HIGH共同组成目标地址。 | 0x0000_0000 |
PCIe_DMA寄存器概览
PCIe_DMA寄存器概览如表14-26所示。
PCIe_DMA寄存器概览(基址是0x0_103D_0000)
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x097C | DMA_WR_ENGINE_EN | DMA写通道使能寄存器 | 14-212 |
| 0x0980 | DMA_WR_DOORBELL | DMA写操作启动和停止控制寄存器 | 14-212 |
| 0x099C | DMA_RD_ENGINE_EN | DMA读通道使能寄存器 | 14-213 |
| 0x09A0 | DMA_RD_DOORBELL | DMA读操作启动和停止控制寄存器 | 14-213 |
| 0x09BC | DMA_WR_INT_STAT | DMA写操作中断状态寄存器 | 14-214 |
| 0x09C4 | DMA_WR_INT_MASK | DMA写操作中断掩码寄存器 | 14-215 |
| 0x09C8 | DMA_WR_INT_CLR | DMA写操作中断清除寄存器 | 14-215 |
| 0x09CC | DMA_WR_ERR_STAT | DMA写操作错误状态寄存器 | 14-216 |
| 0x09D0 | DMA_WR_DONE_IMWR_ADDR_LOW | DMA写完成消息中断地址低位寄存器 | 14-216 |
| 0x09D4 | DMA_WR_DONE_IMWR_ADDR_HIGH | DMA写完成消息中断地址高位寄存器 | 14-217 |
| 0x09D8 | DMA_WR_ABORT_IMWR_ADDR_LOW | DMA写中止消息中断地址低位寄存器 | 14-217 |
| 0x09DC | DMA_WR_ABORT_IMWR_ADDR_HIGH | DMA写中止消息中断地址高位寄存器 | 14-217 |
| 0x09E0 | DMA_WR_IMWR_DATA_0 | DMA写操作消息中断数据寄存器 | 14-217 |
| 0x0A10 | DMA_RD_INT_STAT | DMA读操作中断状态寄存器 | 14-218 |
| 0x0A18 | DMA_RD_INT_MASK | DMA读操作中断掩码寄存器 | 14-218 |
| 0x0A1C | DMA_RD_INT_CLR | DMA读操作中断清除寄存器 | 14-219 |
| 0x0A24 | DMA_RD_ERR_STAT_LOW | DMA读操作错误状态低位寄存器 | 14-220 |
| 0x0A28 | DMA_RD_ERR_STAT_HIGH | DMA读操作错误状态高位寄存器 | 14-220 |
| 0x0A3C | DMA_RD_DONE_IMWR_ADDR_LOW | DMA读完成消息中断地址低位寄存器 | 14-221 |
| 0x0A40 | DMA_RD_DONE_IMWR_ADDR_HIGH | DMA读完成消息中断地址高位寄存器 | 14-221 |
| 0x0A44 | DMA_RD_ABORT_IMWR_ADDR_LOW | DMA读中止消息中断地址低位寄存器 | 14-221 |
| 0x0A48 | DMA_RD_ABORT_IMWR_ADDR_HIGH | DMA读中止消息中断地址高位寄存器 | 14-222 |
| 0x0A4C | DMA_RD_IMWR_DATA | DMA读操作消息中断数据寄存器 | 14-222 |
| 0x0A6C | DMA_CH_INDEX | DMA通道索引寄存器 | 14-222 |
| 0x0A70 | DMA_CH_CTRL | DMA通道控制寄存器 | 14-223 |
| 0x0A78 | DMA_TRANS_SIZE | DMA传输长度寄存器寄存器 | 14-224 |
| 0x0A7C | DMA_SAR_LOW | DMA数据源地址低位寄存器 | 14-225 |
| 0x0A80 | DMA_SAR_HIGH | DMA数据源地址高位寄存器 | 14-225 |
| 0x0A84 | DMA_DAR_LOW | DMA目标地址低位寄存器 | 14-225 |
| 0x0A88 | DMA_DAR_HIGH | DMA目标地址高位寄存器 | 14-226 |
PCIe_DMA寄存器描述
DMA_WR_ENGINE_EN
DMA_WR_ENGINE_EN为DMA写通道使能寄存器。
Offset Address: 0x097C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:1] | RO | reserved | 保留。 | 0x00000000 |
| [0] | RW | dma_wr_engine_en | DMA写通道使能。 0:不使能DMA写通道。 1:使能DMA写通道。 | 0x0 |
DMA_WR_DOORBELL
DMA_WR_DOORBELL为DMA写操作启动和停止控制寄存器。
Offset Address: 0x0980 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31] | RW | dma_wr_stop | DMA写通道停止。 与wr_doorbell_num配合使用,停止对应的DMA写通道数据传输。 0:无影响。 1:停止当前DMA传输。 | 0x0 |
| [30:3] | RO | reserved | 保留。 | 0x0000000 |
| [2:0] | RW | wr_doorbell_num | DMA写通道启动。 通过写入0启动DMA写传输(DMA引擎检测到对此寄存器的写操作即启动对应写通道的DMA操作。由于目前PCIe控制器只支持一个写通道,因此此寄存器必须写0)。 | 0x0 |
DMA_RD_ENGINE_EN
DMA_RD_ENGINE_EN为DMA读通道使能寄存器。
Offset Address: 0x099C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:1] | RO | reserved | 保留。 | 0x00000000 |
| [0] | RW | dma_rd_engine_en | DMA读通道使能。 0:不使能DMA读通道。 1:使能DMA读通道。 | 0x0 |
DMA_RD_DOORBELL
DMA_RD_DOORBELL为DMA读操作启动和停止控制寄存器。
Offset Address: 0x09A0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31] | RW | dma_rd_stop | DMA读通道停止。 与rd_doorbell_num配合使用,停止对应的DMA读通道数据传输。 0:无影响。 1:停止当前DMA传输。 | 0x0 |
| [30:3] | RO | reserved | 保留。 | 0x0000000 |
| [2:0] | RW | rd_doorbell_num | DMA读通道启动。 通过写入0启动DMA读传输(DMA引擎检测到对此寄存器的写操作即启动对应读通道的DMA操作。由于目前PCIe控制器只支持一个读通道,因此此寄存器必须写0)。 | 0x0 |
DMA_WR_INT_STAT
DMA_WR_INT_STAT为DMA写操作中断状态寄存器。
Offset Address: 0x09BC Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:17] | RO | reserved | 保留。 | 0x0000 |
| [16] | RO | dma_wr_abort_int_stat | DMA写操作中止中断状态。 表明DMA写通道检测到错误或者手动停止DMA写操作。 0:无效。 1:有效。 | 0x0 |
| [15:1] | RO | reserved | 保留。 | 0x0000 |
| [0] | RO | dma_wr_done_int_stat | DMA写操作完成中断状态。 表明已成功完成一次DMA写操作。 0:无效。 1:有效。 | 0x0 |
DMA_WR_INT_MASK
DMA_WR_INT_MASK为DMA写操作中断掩码寄存器。
Offset Address: 0x09C4 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:17] | RO | reserved | 保留。 | 0x0000 |
| [16] | RW | dma_wr_abort_int_mask | DMA写操作中止中断掩码。 0:DMA_WR_INT_STAT[dma_wr_abort_int_stat]产生edma_int中断。 1:DMA_WR_INT_STAT[dma_wr_abort_int_stat]不产生edma_int中断。 | 0x0 |
| [15:1] | RO | reserved | 保留。 | 0x0000 |
| [0] | RW | dma_wr_done_int_mask | DMA写操作完成中断掩码。 0:DMA_WR_INT_STAT[dma_wr_done_int_stat]产生edma_int中断。 1:DMA_WR_INT_STAT[dma_wr_done_int_stat]不产生edma_int中断。 | 0x0 |
DMA_WR_INT_CLR
DMA_WR_INT_CLR为DMA写操作中断清除寄存器。
Offset Address: 0x09C8 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:17] | RO | reserved | 保留。 | 0x0000 |
| [16] | RW | dma_wr_abort_int_clr | DMA写操作中止中断清除。 向此位写入1将清除DMA_WR_INT_STAT寄存器中的dma_wr_abort_int_stat中断状态,读取此bit总是返回0。 | 0x0 |
| [15:1] | RO | reserved | 保留。 | 0x0000 |
| [0] | RW | dma_wr_done_int_clr | DMA写操作完成中断清除。 向此位写入1将清除DMA_WR_INT_STAT寄存器中的dma_wr_done_int_stat中断状态,读取此bit总是返回0。 | 0x0 |
DMA_WR_ERR_STAT
DMA_WR_ERR_STAT为DMA写操作错误状态寄存器。
Offset Address: 0x09CC Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:17] | RO | reserved | 保留。 | 0x0000 |
| [16] | RW | linked_list_fetch_err_det | DMA写通道从内存读取链表时检测到AXI总线错误响应。 0:无错误 1:错误 | 0x0 |
| [15:1] | RO | reserved | 保留。 | 0x0000 |
| [0] | RW | app_rd_err_det | DMA写通道从内存读取数据时检测到AXI总线错误响应。 0:无错误 1:错误 | 0x0 |
DMA_WR_DONE_IMWR_ADDR_LOW
DMA_WR_DONE_IMWR_ADDR_LOW为DMA写完成消息中断地址低位寄存器。
Offset Address: 0x09D0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_wr_done_imwr_addr_low | DMA写完成中断消息地址低32位。 | 0x00000000 |
DMA_WR_DONE_IMWR_ADDR_HIGH
DMA_WR_DONE_IMWR_ADDR_HIGH为DMA写完成消息中断地址高位寄存器。
Offset Address: 0x09D4 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_wr_done_imwr_addr_high | DMA写完成中断消息地址高32位。 | 0x00000000 |
DMA_WR_ABORT_IMWR_ADDR_LOW
DMA_WR_ABORT_IMWR_ADDR_LOW为DMA写中止消息中断地址低位寄存器。
Offset Address: 0x09D8 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_wr_abort_imwr_addr_low | DMA写中止中断消息地址低32位。 | 0x00000000 |
DMA_WR_ABORT_IMWR_ADDR_HIGH
DMA_WR_ABORT_IMWR_ADDR_HIGH为DMA写中止消息中断地址高位寄存器。
Offset Address: 0x09DC Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_wr_abort_imwr_addr_high | DMA写中止中断消息地址高32位。 | 0x00000000 |
DMA_WR_IMWR_DATA_0
DMA_WR_IMWR_DATA_0为DMA写操作消息中断数据寄存器。
Offset Address: 0x09E0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | RO | reserved | 保留。 | 0x0000 |
| [15:0] | RW | dma_wr_imwr_data_0 | DMA写通道0的中断消息数据。 | 0x0000 |
DMA_RD_INT_STAT
DMA_RD_INT_STAT为DMA读操作中断状态寄存器。
Offset Address: 0x0A10 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:17] | RO | reserved | 保留。 | 0x0000 |
| [16] | RO | dma_rd_abort_int_stat | DMA读操作中止中断状态。 表明DMA读通道检测到错误或者手动停止DMA写操作。 0:无效。 1:有效。 | 0x0 |
| [15:1] | RO | reserved | 保留。 | 0x0000 |
| [0] | RO | dma_rd_done_int_stat | DMA读操作完成中断状态。 表明已成功完成一次DMA读操作。 0:无效。 1:有效。 | 0x0 |
DMA_RD_INT_MASK
DMA_RD_INT_MASK为DMA读操作中断掩码寄存器。
Offset Address: 0x0A18 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:17] | RO | reserved | 保留。 | 0x0000 |
| [16] | RW | dma_rd_abort_int_mask | DMA读操作中止中断掩码。 0:DMA_RD_INT_STAT[dma_rd_abort_int_stat]产生edma_int中断。 1:DMA_RD_INT_STAT[dma_rd_abort_int_stat]不产生edma_int中断。 | 0x0 |
| [15:1] | RO | reserved | 保留。 | 0x0000 |
| [0] | RW | dma_rd_done_int_mask | DMA读操作完成中断掩码。 0:DMA_RD_INT_STAT[dma_rd_done_int_stat]产生edma_int中断。 1:DMA_RD_INT_STAT[dma_rd_done_int_stat]不产生edma_int中断。 | 0x0 |
DMA_RD_INT_CLR
DMA_RD_INT_CLR为DMA读操作中断清除寄存器。
Offset Address: 0x0A1C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:17] | RO | reserved | 保留。 | 0x0000 |
| [16] | RW | dma_rd_abort_int_clr | DMA读操作中止中断清除。 向此位写入1将清除DMA_RD_INT_STAT寄存器中的dma_rd_abort_int_stat中断状态,读取此bit总是返回0。 | 0x0 |
| [15:1] | RO | reserved | 保留。 | 0x0000 |
| [0] | RW | dma_rd_done_int_clr | DMA读操作中止中断清除。 向此位写入1将清除DMA_RD_INT_STAT寄存器中的dma_rd_done_int_stat中断状态,读取此bit总是返回0。 | 0x0 |
DMA_RD_ERR_STAT_LOW
DMA_RD_ERR_STAT_LOW为DMA读操作错误状态低位寄存器。
Offset Address: 0x0A24 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:17] | RO | linked_list_fetch_err_det | DMA读通道从内存读取链表时检测到AXI总线错误响应。 0:无错误 1:错误 | 0x0000 |
| [16] | RW | reserved | 保留。 | 0x0 |
| [15:1] | RO | reserved | 保留。 | 0x0000 |
| [0] | RW | app_wr_err_det | DMA读通道向内存写入数据时检测到AXI总线错误响应。 0:无错误 1:错误 | 0x0 |
DMA_RD_ERR_STAT_HIGH
DMA_RD_ERR_STAT_HIGH为DMA读操作错误状态高位寄存器。
Offset Address: 0x0A28 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:25] | RO | reserved | 保留。 | 0x00 |
| [24] | RW | dp_err | DMA读通道检测到来自对端设备的中毒数据。 0:无效 1:有效。 | 0x0 |
| [23:17] | RO | reserved | 保留。 | 0x00 |
| [16] | RW | to_err | DMA读通道读操作超时。 0:无效 1:有效。 | 0x0 |
| [15:9] | RO | reserved | 保留。 | 0x00 |
| [8] | RW | ca_err | DMA读通道检测到来自对端设备的CA(Completion Abort)完成包。 0:无效 1:有效。 | 0x0 |
| [7:1] | RO | reserved | 保留。 | 0x00 |
| [0] | RW | ur_err | DMA读通道检测到来自对端设备的UR(Unsupported Request)完成包。 0:无效 1:有效。 | 0x0 |
DMA_RD_DONE_IMWR_ADDR_LOW
DMA_RD_DONE_IMWR_ADDR_LOW为DMA读完成消息中断地址低位寄存器。
Offset Address: 0x0A3C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_rd_done_imwr_addr_low | DMA读完成中断消息地址低32位。 | 0x00000000 |
DMA_RD_DONE_IMWR_ADDR_HIGH
DMA_RD_DONE_IMWR_ADDR_HIGH为DMA读完成消息中断地址高位寄存器。
Offset Address: 0x0A40 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_rd_done_imwr_addr_high | DMA读完成中断消息地址高32位。 | 0x00000000 |
DMA_RD_ABORT_IMWR_ADDR_LOW
DMA_RD_ABORT_IMWR_ADDR_LOW为DMA读中止消息中断地址低位寄存器。
Offset Address: 0x0A44 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_rd_abort_imwr_addr_low | DMA读中止中断消息地址低32位。 | 0x00000000 |
DMA_RD_ABORT_IMWR_ADDR_HIGH
DMA_RD_ABORT_IMWR_ADDR_HIGH为DMA读中止消息中断地址高位寄存器。
Offset Address: 0x0A48 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_rd_abort_imwr_addr_high | DMA读中止中断消息地址高32位。 | 0x00000000 |
DMA_RD_IMWR_DATA
DMA_RD_IMWR_DATA为DMA读操作消息中断数据寄存器。
Offset Address: 0x0A4C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | RO | reserved | 保留。 | 0x0000 |
| [15:0] | RW | dma_rd_imwr_data | DMA读通道的中断消息数据。 | 0x0000 |
DMA_CH_INDEX
DMA_CH_INDEX为DMA通道索引寄存器。
Offset Address: 0x0A6C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31] | RW | ch_dir | 通道方向。 通过此位选择要配置的寄存器属于读通道还是写通道。 0:写通道。 1:读通道。 | 0x0 |
| [30:3] | RO | reserved | 保留。 | 0x0000000 |
| [2:0] | RW | reserved | 保留,必须设置为0。 | 0x0 |
DMA_CH_CTRL
DMA_CH_CTRL为DMA通道控制寄存器。
Offset Address: 0x0A70 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:30] | RW | addr_trans | PCIe事务AT位。 DMA发起的PCIe存储器读写事务包中的的AT位将由此成员值代替。 | 0x0 |
| [29:27] | RW | traffic_class | PCIe事务TC位。 DMA发起的PCIe存储器读写事务包中的的TC位将由此成员值代替。 | 0x0 |
| [26] | RW | traffic_digest | PCIe事务TD位。 DMA发起的PCIe存储器读写事务包中的的TD位将由此成员值代替。 | 0x0 |
| [25] | RW | relaxed_order | PCIe事务RO位。 DMA发起的PCIe存储器读写事务包中的的RO位将由此成员值代替。 | 0x0 |
| [24] | RW | no_snoop | PCIe事务NS位。 DMA发起的PCIe存储器读写事务包中的的NS位将由此成员值代替。 | 0x0 |
| [23:17] | RO | reserved | 保留。 | 0x00 |
| [16:12] | RW | fun_num | PCIe事务fun_num位。 DMA发起的PCIe存储器读写事务包中的的功能号将由此成员值代替。 | 0x00 |
| [11:10] | RO | reserved | 保留。 | 0x0 |
| [9] | RO | reserved | 保留。 | 0x0 |
| [8] | RO | reserved | 保留。 | 0x0 |
| [7] | RO | reserved | 保留。 | 0x0 |
| [6:5] | RO | ch_status | 通道状态。 表明通道所处的工作状态。 00:保留。 01:正在进行DMA传输。 10:运行错误。 11:通道成功完成DMA传输或通道被手动停止传输。 | 0x0 |
| [4] | RO | reserved | 保留。 | 0x0 |
| [3] | RW | local_int_enable | 本地DMA中断使能。 设置此位有效,则可以在DMA传输完成或失败时发出DMA本地中断。 0:不使能DMA本地中断; 1:使能DMA本地中断。 | 0x0 |
| [2] | RO | reserved | 保留。 | 0x0 |
| [1] | RO | reserved | 保留。 | 0x0 |
| [0] | RO | reserved | 保留。 | 0x0 |
DMA_TRANS_SIZE
DMA_TRANS_SIZE为DMA传输长度寄存器寄存器。
Offset Address: 0x0A78 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_trans_size | DMA传输长度。 在DMA传输之前将需要传输的数据长度写入此寄存器,最小传输长度是1个字节,最大4G字节。 在DMA传输过程中,此寄存器值会自动递减。寄存器的值为未传输的字节数,传输成功结束后此寄存器为0。 | 0x00000000 |
DMA_SAR_LOW
DMA_SAR_LOW为DMA数据源地址低位寄存器。
Offset Address: 0x0A7C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_sar_low | DMA传输数据的源地址(低32位)。 在DMA传输之前将源数据的起始地址写入此寄存器,DMA通道将从此地址获取将要传输的数据。 在DMA传输过程中,此寄存器的值会自动递增。 此寄存器低2比特必须为0。 | 0x00000000 |
DMA_SAR_HIGH
DMA_SAR_HIGH为DMA数据源地址高位寄存器。
Offset Address: 0x0A80 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_sar_high | DMA传输数据的源地址(高32位)。 32位地址模式下必须为0。 64位地址模式下与DMA_SAR_LOW组成64位的源地址。 | 0x00000000 |
DMA_DAR_LOW
DMA_DAR_LOW为DMA目标地址低位寄存器。
Offset Address: 0x0A84 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_dar_low | DMA传输数据的目标地址(低32位)。 在DMA传输之前将目标地址写入此寄存器,DMA通道将从源地址获取的数据写入目标地址内。 在DMA传输过程中,此寄存器的值会自动递增。 此寄存器低2比特必须为0。 | 0x00000000 |
DMA_DAR_HIGH
DMA_DAR_HIGH为DMA目标地址高位寄存器。
Offset Address: 0x0A88 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | dma_dar_high | DMA传输数据的目标地址(高32位)。 32位地址模式下必须为0。 64位地址模式下与DMA_DAR_LOW组成64位的目标地址。 | 0x00000000 |
PCIe_MSI中断管理单元寄存器概览
寄存器偏移地址中变量的取值范围和含义如表14-27所示。
| 变量名称 | 取值范围 | 描述 |
|---|---|---|
| n | 0~7 | PCIe MSI中断管理单元支持8个MSI中断管理子单元。对8个EP节点上报的中断进行管理。n(0~7)分别指示不同MSI中断管理子单元。 |
PCIe_MSI中断管理单元寄存器概览如表14-28所示。
PCIe_MSI中断管理单元寄存器概览(基址0x0_103D_0000)
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x820 | MSI_CTRL_ADDR_LOW | PCIe Message Address低位寄存器 | 14-227 |
| 0x824 | MSI_CTRL_ADDR_HIGH | PCIe Message Address高位寄存器 | 14-227 |
| 0x828+n×0xC | MSI_CTRL_INT_EN | PCIe MSI中断使能寄存器 | 14-228 |
| 0x82C+ n×0xC | MSI_CTRL_INT_MASK | PCIe MSI中断掩码寄存器 | 14-229 |
| 0x830+ n×0xC | MSI_CTRL_INT_STATUS | PCIe MSI中断状态寄存器 | 14-229 |
PCIe MSI中断管理单元寄存器描述
MSI_CTRL_ADDR_LOW
MSI_CTRL_ADDR_LOW为PCIe Message Address低位寄存器。
Offset Address: 0x820 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:0] | RW | msi_ctrl_addr_low | PCIe Message Address低32bit。 系统指定一个Message Address。用于匹配MEM写事务是否是MSI报文。 控制器收到一个MEM写请求,会检测MEM写请求的目标地址是否与MSI_CTRL_ADDR匹配,并检查是否满足MSI中断请求的定义。 当满足条件时,MEM写请求会被标记为MSI请求。 | 0x00000000 |
MSI_CTRL_ADDR_HIGH
MSI_CTRL_ADDR_HIGH为PCIe Message Address高位寄存器。
Offset Address: 0x824 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:0] | RW | msi_ctrl_addr_high | PCIe Message Address高32bit。 系统指定一个Message Address。用于匹配MEM 写事务是否是MSI报文。 控制器收到一个MEM写请求,会检测MEM写请求的目标地址是否与MSI_CTRL_ADDR匹配,并检查是否满足MSI中断请求的定义。 当满足条件时,MEM写请求会被标记为MSI请求。 当Message Address是64bit地址时,需要配置MSI_CTRL_ADDR_HIGH;当Message Address是32bit地址时,该寄存器设置为0。 | 0x00000000 |
MSI_CTRL_INT_EN
MSI_CTRL_INT_EN为PCIe MSI中断使能寄存器。
Offset Address: 0x828+n×0xC Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:0] | RW | msi_ctrl_int_en | PCIe MSI中断使能。 PCIe MSI中断管理单元支持对8个EP节点上报的中断进行管理。n(0~7)分别指示不同MSI中断管理子单元。 每个EP节点最多支持32个中断向量。 该寄存器的每个bit对应一个MSI中断向量使能位。 0:不使能。 1:使能。 | 0x00000000 |
MSI_CTRL_INT_MASK
MSI_CTRL_INT_MASK为PCIe MSI中断掩码寄存器。
Offset Address: 0x82C+n×0xC Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:0] | RW | msi_ctrl_int_mask | PCIe MSI中断掩码。 PCIe MSI中断管理单元支持对8个EP节点上报的中断进行管理。n(0~7)分别指示不同MSI中断管理子单元。 每个EP节点最多支持32个中断向量。 该寄存器的每个bit对应一个MSI中断向量中断掩码位。 0:不屏蔽。收到MSI中断时,对应中断状态寄存器记录原始中断,并上报PCIE_MSI_INT中断。 1:收到MSI中断时,对应中断状态寄存器记录原始中断,并不产生PCIE_MSI_INT中断。 | 0x00000000 |
MSI_CTRL_INT_STATUS
MSI_CTRL_INT_STATUS为PCIe MSI中断状态寄存器。
Offset Address: 0x830+n×0xC Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:0] | RWC | msi_ctrl_int_status | PCIe MSI中断状态。 PCIe MSI中断管理单元支持对8个EP节点上报的中断进行管理。n(0~7)分别指示不同MSI中断管理子单元。 每个EP节点最多支持32个中断向量。 该寄存器的每个bit对应一个MSI的原始中断状态。 0:对应中断向量位,未收到MSI中断(原始中断) 1:对应中断向量位,收到MSI中断(原始中断) 该寄存器为写1清寄存器。向对应bit位写入1,将清除MSI_CTRL_INT_STATUS寄存器对应中断向量的中断状态 | 0x00000000 |
PCIe内部系统控制寄存器概览
PCIe内部系统控制寄存器概览如表14-29所示。
PCIe内部系统控制寄存器概览(基址是0x0_103D_0000)
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0xC00 | PCIE_SYS_CTRL0 | PCIE内部系统控制寄存器0 | 14-230 |
| 0xC04 | PCIE_SYS_CTRL1 | PCIE内部系统控制寄存器1 | 14-231 |
| 0xC08 | PCIE_SYS_CTRL2 | PCIE内部系统控制寄存器2 | 14-231 |
| 0xC1C | PCIE_SYS_CTRL7 | PCIE内部系统控制寄存器7 | 14-232 |
| 0xF00 | PERI_PCIE_STAT | PCIE内部系统控制状态寄存器0 | 14-232 |
PCIe内部系统控制寄存器描述
PCIE_SYS_CTRL0
PCIE_SYS_CTRL0为PCIE内部系统控制寄存器0。
Offset Address: 0xC00 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:28] | RW | pcie_device_type | PCIe控制器的模式。 0x0:PCI Express EP设备; 0x1:Legacy PCI Express设备; 0x4:PCI Express RC设备; 其他:保留。 | 0x0 |
| [27:0] | RO | reserved | 保留。 | 0x0000000 |
PCIE_SYS_CTRL1
PCIE_SYS_CTRL1为PCIE内部系统控制寄存器1。
Offset Address: 0xC04 Total Reset Value: 0x0000_0004
| Bits | Access | Name | Description | Reset |
| [31:24] | RO | reserved | 保留。 | 0x00 |
| [23] | RW | pcie_app_clk_req_n | PCIe控制器应用层时钟请求。 0:申请时钟; 1:不申请时钟。 | 0x0 |
| [22:0] | RO | reserved | 保留。 | 0x000004 |
PCIE_SYS_CTRL2
PCIE_SYS_CTRL2为PCIE内部系统控制寄存器2。
Offset Address: 0xC08 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:27] | RW | pcie_ven_msi_vector | PCIe控制器MSI数据调整控制寄存器。 当PCIe控制器发起MSI报文请求时,此寄存器域与MSI数据寄存器 (PCIe配置空间标准寄存器)的低5bit进行或运算得到新的MSI数据。 | 0x00 |
| [26] | RW | pcie_ven_msi_req | 指示PCIe控制器是否请求发送消息中断(MSI)。 0:无请求; 1:请求。 | 0x0 |
| [25:0] | RO | reserved | 保留。 | 0x0000000 |
PCIE_SYS_CTRL7
PCIE_SYS_CTRL7为PCIE内部系统控制寄存器2。
Offset Address: 0xC1C Total Reset Value: 0x001F_F800
| Bits | Access | Name | Description | Reset |
| [31:12] | RO | reserved | 保留。 | x001FF |
| [11] | RW | pcie_app_ltssm_enable | PCIe控制器使能。 0:不使能PCIe控制器; 1:使能PCIe控制器。 | 0x1 |
| [10:6] | - | reserved | 保留。 | 0x00 |
| [5] | RW | pcie_sys_int | PCIe控制器中断请求。 - 此寄存器值由0变为1时,PCIe控制器产生一个Assert_INTx消息; - 此寄存器值由1变为0时,PCIe控制器产生一个Deassert_INTx消息。 | 0x0 |
| [4:0] | - | reserved | 保留。 | 0x00 |
PERI_PCIE_STAT
PERI_PCIE_STAT为PCIE状态寄存器0。
Offset Address: 0xF00 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:16] | RO | reserved | 保留。 | 0x0000 |
| [15] | RO | pcie_xmlh_link_up | PCIe PHY链路连接状态。 0:连接已断开; 1:连接已建立。 | 0x0 |
| [14:6] | RO | reserved | 保留。 | 0x000 |
| [5] | RO | pcie_rdlh_link_up | PCIe控制器数据链路层连接状态指示。 0:连接已断开; 1:连接已建立。 | 0x0 |
| [4:0] | RO | reserved | 保留。 | 0x00 |
USB3.0
概述
该系统支持1个USB3.0 HOST模块和1个USB3.0 DRD(Dule Role Device)模块,USB3.0 DRD支持USB3.0 host 和 USB3.0 device 的静态切换,即只需要配置相关寄存器就能使该模块工作在USB3.0 host 或者 USB3.0 device 模式。
两个模块支持USB3.0协议规定的5Gbit/s 传输速率以及向后兼容USB2.0 协议规定的480Mbit/s传输速率;完全支持XHCI 1.0 协议;支持超速传输的PIPE接口协议以及兼容高速传输的UTMI接口协议;两个USB3.0 控制器均可以完成。
- 对传输的控制和处理
- 对数据包的解析和打包
- 对USB传输信号的编码和解码
- 为驱动程序提供了中断向量等接口
功能描述
逻辑框图
USB 3.0逻辑框图如图14-63所示。

UTMI:USB2.0 Transceiver Macrocell Interface
XHCI:eXtensible Host Controller Interface
功能特点
USB3.0 HOST和USB 3.0 DRD具有以下功能特点:
- 完全兼容USB3.0 以及向下兼容USB 2.0。
- 完全符合 XHCI 1.0。
- USB3.0 DRD可单独工作在Host 或者 Device 模式。
- 可以支持Super-speed、High-speed、Full-speed、Low-speed四种设备。
- 支持USB 2.0低功耗的解决方案 和 USB3.0的 U0、U1、U2、U3四种功耗状态。
- 支持Host工作模式下Control Transfer、Bulk Transfer、Isochronous Transfer、Interrupt Transfer四种基本数据传输类型。
- USB3.0 DRD支持Device 工作模式下的Control Transfer、Bulk Transfer、Isochronous Transfer、Interrupt Transfer四种基本数据传输类型。
- 支持内部DMA控制器。
- 可以通过连接USB Hub,连接最多64个设备。
工作原理
USB3.0 HOST和USB 3.0 DRD工作于Host 模式时,支持以下4种标准的传输方式:
- Control Transfer(控制传输)
主要用于USB Host与USB Device端点0之间的传输,某些特定型号的USB设备的控制传输可能用到其他的端点。控制传输是双向传输,数据量通常较小,可以传输8byte、16byte、32byte或64byte的数据,依赖于设备和传输速度。
- Bulk Transfer(批量传输)
主要用于没有带宽和间隔时间要求的情况下发送和接收大量的数据,这种类型的设备适合于传输非常慢和大量被延迟的传输,可以等到所有其他类型的数据的传送完成之后再传送和接收数据。它的特点是以错误检测和重传的方式保证USB Host与USB Device的数据被无差错地发送。
- Isochronous Transfer(同步传输)
主要用于时间严格并具有较强容错性的流数据传输,或者用于数据传输速率恒定的即时应用中。同步传输提供了确定的带宽和间隔时间。
- Interrupt Transfer(中断传输)
主要用于少量、分散、不可预测的数据的传输。中断传输方式下,定时查询设备是否有中断数据要发送。设备的端点模式器的结构决定了它的查询频率为1ms~255ms。典型的中断方式传输是单向的,并且对于USB Host来说只有输入的方式。
工作方式
USB3.0 HOST时钟复位
在初始化控制器之前,对时钟复位寄存器做相应的配置。
关断时钟的步骤如下:
向PERI_CRG3632[4]写入0x1,打开U2PHY0的参考时钟门控。
向PERI_CRG3632[0]、[1]写入0x0,撤离U2PHY0的总复位和数字复位。
向PERI_CRG3665[4]写入0x1,打开COMPHY0参考时钟门控。
向PERI_CRG3665[0]写入0x0,撤离COMPHY0的总复位。
向PERI_CRG3664[12]、[8]、[6]、[5]、[4]写入0x1,打开控制器的PIPE、UTMI、SUSPEND、REF和总线等工作时钟门控。
PERI_CRGUSB3.0 DRD时钟复位
在初始化控制器之前,对时钟复位寄存器做相应的配置。
关断时钟的步骤如下:
向PERI_CRG3640[4]写入0x1,打开U2PHY1的参考时钟门控。
向PERI_CRG3640[0]、[1]写入0x0,撤离U2PHY1的总复位和数字复位。
向PERI_CRG3673[4]写入0x1,打开COMPHY1参考时钟门控。
向PERI_CRG3673[0]写入0x0,撤离COMPHY1的总复位。
向PERI_CRG3672 [12]、[8]、[6]、[5]、[4]写入0x1,打开控制器的PIPE、UTMI、SUSPEND、REF和总线等工作时钟门控。
向PERI_CRG3672[0]写入0x0,撤离U3 DRD控制器的复位。
----结束
USB3.0 DRD Host/device 工作模式切换
切换操作如下:
- 向PERI_USB3_GCTL [prtcapdir] 写入2’b01,DRD控制器将工作于Host模式。
- 向PERI_USB3_GCTL [prtcapdir] 写入2’b10,DRD控制器将工作于Device模式。
须知
Host/Device工作模式切换只支持静态切换,不支持动态切换。
USB2.0 PHY寄存器概览
USB2.0 PHY寄存器概览如表14-30所示。
说明
- USB3_0端口对应PHY0,USB3_1端口对应PHY1,基地址不同,偏移地址相同。
- 调节PHY的参数时,需注意只改动对应控制比特位的值,其他比特位的值保持不变。
USB2.0 PHY寄存器概览(PHY0基址是0x0_1031_0000;PHY1基址是0x0_1033_0000)
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x0000 | USB2_PHY0_ANA_CFG0 | USB2.0 PHY0 pre-drive调节寄存器 | 14-237 |
| 0x0010 | USB2_PHY0_ANA_CFG4 | USB2.0 PHY0高速眼图幅度配置寄存器 | 14-237 |
USB2.0 PHY寄存器描述
USB2_PHY0_ANA_CFG0
USB2_PHY0_ANA_CFG0为USB2 PHY0 pre-drive调节寄存器。
Offset Address: 0x0000 Total Reset Value: 0x0A33_CC2B
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:28] | - | Reserved | 保留。 | 0x0 |
| [27:24] | RW | usb2_phy0_rg_hstx_pdrv_p | 配置Pre-drive强度的档位:bit<0>*1+bit<1>*2+bit<2>*4+bit<3>*8 | 0xA |
| [23:0] | - | Reserved | 保留。 | 0x33CCCB |
USB2_PHY0_ANA_CFG4
USB2_PHY0_ANA_CFG4为USB2 PHY0高速眼图幅度配置寄存器。
Offset Address: 0x0010 Total Reset Value: 0x10643
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:7] | - | Reserved | 保留。 | 0x000020C |
| [6:4] | RW | usb2_phy0_rg_vtxref_sel | 配置HS眼图幅度的参考值(仅代表调节趋势,不代表精确值): 000:380mv 001:390mv 010:400mv 011:410mv 100:420mv 101:430mv 110:440mv 111:460mv | 0x4 |
| [3:0] | - | Reserved | 保留。 | 0x3 |
USB3.0寄存器概览
USB3.0寄存器概览如表14-31所示。
USB3.0寄存器概览(USB3.0 HOST基址是0x0_1030_0000,USB3.0 DRD基地址是0x0_1032_0000)
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0xC100 | PERI_USB3_GSBUSCFG0 | 全局SOC总线配置寄存器0 | 14-241 |
| 0xC104 | PERI_USB3_GSBUSCFG1 | 全局SOC总线配置寄存器1 | 14-242 |
| 0xC108 | PERI_USB3_GTXTHRCFG | 全局发送门限控制寄存器 | 14-243 |
| 0xC10C | PERI_USB3_GRXTHRCFG | 全局接收门限控制寄存器 | 14-244 |
| 0xC110 | PERI_USB3_GCTL | 全局core控制寄存器 | 14-245 |
| 0xC118 | PERI_USB3_GSTS | 全局状态寄存器 | 14-249 |
| 0xC11C | PERI_USB3_GUCTL1 | 全局用户控制寄存器1 | 14-250 |
| 0xC124 | PERI_USB3_GGPIO | 全局GPIO 寄存器 | 14-251 |
| 0xC128 | PERI_USB3_GUID | 全局用户ID寄存器 | 14-251 |
| 0xC12C | PERI_USB3_GUCTL | 全局用户控制寄存器 | 14-251 |
| 0xC130 | PERI_USB3_GBUSERRADDR_HI | 全局总线错误地址高32位寄存器 | 14-253 |
| 0xC134 | PERI_USB3_GBUSERRADDR_LO | 全局总线错误地址低32位寄存器 | 14-254 |
| 0xC138 | PERI_USB3_GPRTBIMAP_HI | 超速端口-总线映射高32位寄存器 | 14-254 |
| 0xC13C | PERI_USB3_GPRTBIMAP_LO | 超速端口-总线映射低32位寄存器 | 14-254 |
| 0xC180 | PERI_USB3_GPRTBIMAP_HS_HI | 高速端口-总线映射高32位寄存器 | 14-255 |
| 0xC184 | PERI_USB3_GPRTBIMAP_HS_LO | 高速端口-总线映射低32位寄存器 | 14-255 |
| 0xC188 | PERI_USB3_GPRTBIMAP_FS_HI | 全速端口-总线映射高32位寄存器 | 14-255 |
| 0xC18C | PERI_USB3_GPRTBIMAP_FS | 全速端口-总线映射低32位寄存器 | 14-255 |
| 0xC200 | PERI_USB3_GUSB2PHYCFGN | 全局USB2.0 PHY配置寄存器 | 14-256 |
| 0xC2C0 | PERI_USB3_GUSB3PIPECTLN | 全局USB3.0 PIPE控制寄存器 | 14-258 |
| 0xC304 | PERI_USB3_GTXFIFOSIZN | 全局发送FIFO大小寄存器 | 14-262 |
| 0xC384 | PERI_USB3_GRXFIFOSIZN | 全局接收FIFO大小寄存器 | 14-263 |
| 0xC410 | PERI_USB3_GEVNTADRN_HI | 全局event buffer的地址高32位寄存器 | 14-263 |
| 0xC414 | PERI_USB3_GEVNTADRN_LO | 全局event buffer的地址低32位寄存器 | 14-263 |
| 0xC418 | PERI_USB3_GEVNTSIZN | 全局event buffer的大小寄存器 | 14-263 |
| 0xC41C | PERI_USB3_GEVNTCOUNTN | 全局event buffer的计数寄存器 | 14-264 |
| 0xC610 | PERI_USB3_GTXFIFOPRIDEV | 外设的全局TX FIFO DMA优先寄存器 | 14-264 |
| 0xC618 | PERI_USB3_GTXFIFOPRIHST | host的全局TX FIFO DMA优先寄存器 | 14-264 |
| 0xC61C | PERI_USB3_GRXFIFOPRIHST | host的全局RX FIFO DMA优先寄存器 | 14-265 |
| 0xC620 | PERI_USB3_GFIFOPRIDBC | host的全局 Debug 性能时DMA优先寄存器 | 14-265 |
| 0xC624 | PERI_USB3_GDMAHLRATIO | host的全局 FIFO DMA高、低优先权比例寄存器 | 14-265 |
| 0xC630 | PERI_USB3_GFLADJ | GFLADJ为全局帧长度调整寄存器 | 14-266 |
| 0xC700 | PERI_USB3_DCFG | 外设配置寄存器 | 14-267 |
| 0xC704 | PERI_USB3_DCTL | 外设控制寄存器 | 14-268 |
| 0xC708 | PERI_USB3_DEVTEN | 外设事件使能寄存器 | 14-272 |
| 0xC70C | PERI_USB3_DSTS | 外设状态寄存器 | 14-273 |
| 0xC710 | PERI_USB3_DGCMDPAR | 外设类命令参数寄存器 | 14-276 |
| 0xC714 | PERI_USB3_DGCMD | 外设类命令寄存器 | 14-276 |
| 0xC718 | PERI_USB3_DALEPENA | 外设USB端点使能寄存器 | 14-277 |
| 0xC810 | PERI_USB3_DEPCMDPAR2N | 外设端点命令参数寄存器2 | 14-278 |
| 0xC814 | PERI_USB3_DEPCMDPAR1N | 外设端点命令参数寄存器1 | 14-278 |
| 0xC818 | PERI_USB3_DEPCMDPAR0N | 外设端点命令参数寄存器0 | 14-278 |
| 0xC81C | PERI_USB3_DEPCMDN | 外设物理端点命令寄存器 | 14-279 |
USB3.0寄存器描述
PERI_USB3_GSBUSCFG0
PERI_USB3_GSBUSCFG0为全局SOC总线配置寄存器0。
Offset Address: 0xC100 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:28] | RW | datrdreqinfo | AHB-prot/AXI-cache/OCP-ReqInfo读数据的请求。 | 0x0 |
| [27:24] | RW | desrdreqinfo | AHB-prot/AXI-cache/OCP-ReqInfo读链表请求。 | 0x0 |
| [23:20] | RW | datwrreqinfo | AHB-prot/AXI-cache/OCP-ReqInfo写数据请求。 | 0x0 |
| [19:16] | RW | deswrreqinfo | AHB-prot/AXI-cache/OCP-ReqInfo写链表请求。 | 0x0 |
| [15:12] | RW | reserved | 保留。 | 0x0 |
| [11] | RW | datbigend | 数据存取大小端选择。 0:小端; 1:大端。 | 0x0 |
| [10] | RW | descbigend | 链表存取大小端选择。 0:小端; 1:大端。 | 0x0 |
| [9:8] | RO | reserved | 保留。 | 0x0 |
| [7] | RW | incr256brstena | AHB master INCR 进行128 beat burst 传输使能信号。 0:不使能; 1:使能。 | 0x0 |
| [6] | RW | incr128brstena | AHB master INCR 进行128 beat burst 传输使能信号。 0:不使能; 1:使能。 | 0x0 |
| [5] | RW | incr64brstena | AHB master INCR 进行64 beat burst 传输使能信号。 0:不使能; 1:使能。 | 0x0 |
| [4] | RW | incr32brstena | AHB master INCR 进行32 beat burst 传输使能信号。 0:不使能; 1:使能。 | 0x0 |
| [3] | RW | incr16brstena | AHB master INCR 进行16 beat burst 传输使能信号。 0:不使能; 1:使能。 | 0x0 |
| [2] | RW | incr8brstena | AHB master INCR 进行8 beat burst 传输使能信号。 0:不使能; 1:使能。 | 0x0 |
| [1] | RW | incr4brstena | AHB master INCR 进行4 beat burst 传输使能信号。 0:不使能; 1:使能。 | 0x0 |
| [0] | RW | incrbrstena | AHB master INCR 进行1 beat burst 传输使能信号。 0:不使能; 1:使能。 | 0x0 |
PERI_USB3_GSBUSCFG1
PERI_USB3_GSBUSCFG1为全局SOC总线配置寄存器1。
Offset Address: 0xC104 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:13] | RO | reserved | 保留。 | 0x00000 |
| [12] | RW | en1kpage | 1K Byte边界选择。 0:4K Byte 边界; 1:1K Byte 边界。 | 0x0 |
| [11:8] | RW | pipetranslimit | AXI master outstanding请求数目。 0x0:1个请求; 0x1:2个请求; 0x2:3个请求; 0x3:4个请求; … 0xF:16个请求。 | 0x0 |
| [7:0] | RO | reserved | 保留。 | 0x00 |
PERI_USB3_GTXTHRCFG
PERI_USB3_GTXTHRCFG为全局发送门限控制寄存器。
Offset Address: 0xC108 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:30] | RO | reserved | 保留。 | 0x0 |
| [29] | RW | usbtxpktcntsel | USB TXFIFO门限选择,仅在SuperSpeed时有效。 0:USB 只在 全部的包被读取到既定的TXFIFO后,才开始进行传输; 1:USB 只在 设定的包被读取到既定的TXFIFO后,才开始进行传输。 | 0x0 |
| [28] | RO | reserved | 保留。 | 0x0 |
| [27:24] | RW | usbtxpktcnt | TXFIFO 门限值设置,有效值在1-15 以内。 | 0x0 |
| [23:16] | RW | usbmaxtxburstsize | 发送 burst 的最大值,仅在host模式下 SuperSpeed的bulk,Isochronous和Interrupt传输的Out 端点时有效,有效值在1-16之间。 | 0x00 |
| [15:0] | RO | reserved | 保留。 | 0x0000 |
PERI_USB3_GRXTHRCFG
PERI_USB3_GRXTHRCFG为全局接收门限控制寄存器。
Offset Address: 0xC10C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:30] | RO | reserved | 保留。 | 0x0 |
| [29] | RW | usbtxpktcntsel | USB RXFIFO门限选择,仅在SuperSpeed时有效。 0:USB 只在 全部的包被读取到既定的RXFIFO后,才开始进行传输; 1:USB 只在 设定的包被读取到既定的RXFIFO后,才开始进行传输。 | 0x0 |
| [28] | RO | reserved | 保留。 | 0x0 |
| [27:24] | RW | usbtxpktcnt | RXFIFO 门限值设置,有效值在1-15 以内。 | 0x0 |
| [23:19] | RO | usbmaxtxburstsize | 接收 burst 的最大值,仅在host模式下 SuperSpeed的bulk,Isochronous和Interrupt传输的IN 端点时有效,有效值在1-16之间。 | 0x00 |
| [18:0] | RO | reserved | 保留。 | 0x00000 |
PERI_USB3_GCTL
PERI_USB3_GCTL为全局core控制寄存器。
Offset Address: 0xC110 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:19] | RW | pwrdnscale | Suspend_clk设置,GCTL[31:19] * 16K = Suspend_clk 说明:32kHz<Suspend_clk<125MHz。 | 0x0000 |
| [18] | RW | masterfiltbypass | 滤波功能选择。 0:当DWC_USB3_EN_BUS_FILTERS值为1时,选择滤波功能; 1:无论当DWC_USB3_EN_BUS_FILTERS值为多少,关闭滤波功能。 | 0x0 |
| [17] | RW | bypssetaddr | Device 模式下 SetAddress命令选择。 0:Host 正常发送SetAddress命令给Device; 1:Host 不发送SetAddress命令给Device,Device读取DCFG[DevAddress]比特位的值作为Address的值。 说明:只在仿真时设置此bit位。 | 0x0 |
| [16] | RW | u2rstecn | 超时连接选择。 0:当超速连接失败时,设备处于HS模式; 1:当超速连接失败时,Devcie将花费大于3个cycle的时间等待连接。 说明:此比特位仅在Device模式下有效。 | 0x0 |
| [15:14] | RW | frmscldwn | SOF/USOF/ITP时间间隔选择。对于SS/HS模式: 00:125us; 01:62.5us; 10:31.25us; 11:15.625us; 其他:保留。 对于FS模式,将上述值*8 即可。 当选择xHCI Debug 模式时,可配置仿真时bulk in 和 bulkout传输的MaxPacketSize, 00:1024 bytes; 01:512 bytes; 10:256 bytes; 11:128bytes; 其他:保留。 | 0x0 |
| [13:12] | RW | prtcapdir | 端口配置类型。 00:保留; 01:Host配置; 10:Device 配置; 11:保留。 | 0x0 |
| [11] | RW | coresoftreset | Core 软复位选择。 0:不进行软复位; 1:对core软复位。 说明:当对core进行软复位操作时,将清掉中断及初下列寄存器以外的所有中断: -GCTL -GUCTL -GSTS -GSNPSID -GGPIO -GUID -GUSB2PHYCFGn -GUSB3PIPECTLn -DCFG -DCTL -DEVTEN -DSTS | 0x0 |
| [10] | RW | sofitpsync | 0:UTMI/ULPI PHY 的第一个端口都将处于非挂起状态,不管是否有其他的SS端口不处于Rx.Detect, SS.Disable 和 U3状态; 1:UTMI/ULPI PHY 的第一个端口都将处于非挂起状态,不管是否有其他的非SS 端口不处于非挂起状态。 说明:此bit只在控制器工作于Host模式时有效。 | 0x0 |
| [9] | RW | u1u2timerscale | U1/U2 timer scaledown选择。 0:不关闭; 1:如果PERI_USB3_GCTL[5:4] (ScaleDown) = X1,则关闭U1/U2的反应时间的scaledown。 | 0x0 |
| [8] | RW | debugattach | Debug Attach 信号 当此位被置1时 -当DCTL寄存器里的Ru/Stop位被置位后,SS 控制器将直接进入Polling link 状态而不需要检测远程设备的连接 -Link LFPS polling 的超时 时间有限 -TS1 的Polling 超时时间有限。 | 0x0 |
| [7:6] | RW | ramclksel | RAM Clock 选择。 00:bus clock; 01:pipe clock; 10:pipe/2 clock; 11:reserved。 说明:当处于host 模式时,硬件将置此2位为00,即将ram_clk 接bus_clk,因为当 SS port处于P3 状态时,pipe_clk会被关闭,USB2.0 port将不会工作。 | 0x0 |
| [5:4] | RW | scaledown | scale-down timing选择。 HS/FS/LS模式下: 00:关闭掉所有的scale-down timing,使用实际的timing进行仿真; 01:启用除以下功能外地所有的scale-down timing: -speed enumeration -HNP/SRP -Host 模式 的suspend 和 resume; 10:仅仅开启device 模式时suspend 和 resume 功能时的scale-down timing; 11:打开所有的scale-down timing。 SS模式下 HS/FS/LS模式下 00:关闭掉所有的scale-down timing,使用实际的timing进行仿真; 01:开启SS的 scale-dowm timing,包括: -减少TxEq training sequences 到8 -减少LFPS polling burst time 到100ns -减少LFPS warm reset receive 到 30us 10:不发送TxEq training sequences; 11:打开所有的scale-down timing。 | 0x0 |
| [3] | RW | disscramble | 关闭加扰功能。 1:关闭; 0:不关闭。 | 0x0 |
| [2] | RW | u2exit_lfps | U2状态退出信号。 0:link将把248ns的LFPS信号当做有效的U2退出状态信号; 1:link层在检测到有效的U2退出信号前等待8us。 | 0x0 |
| [1] | RW | gblhibernationen | 休眠使能。 0:关闭全局休眠功能,pmu接收D0->D3或者D3->D0的状态切换,core内部的状态将不会保存或者恢复; 1:打开全局休眠功能。 | 0x0 |
| [0] | RW | dsblclkgtng | 内部Clock Gating选择。 0:选择内部clock gating; 1:当core处于lpm模式时,关闭掉内部clock gating。 说明:上电复位后可将此bit置为1 | 0x0 |
PERI_USB3_GSTS
PERI_USB3_GSTS为全局状态寄存器。
Offset Address: 0xC118 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:20] | RO | cbelt | 指示在Host模式下,所有接收到的device BELT value的最小值,以及Set Latency Tolerance Value 命令设置的 BELT值。 | 0x000 |
| [19:10] | - | reserved | 保留。 | 0x000 |
| [9] | RO | bc_ip | 指示BCEVT寄存器中有一个与BC有关的中断等待处理。 0:无指示; 1:有指示。 | 0x0 |
| [8] | RO | adp_ip | 指示ADPEVT寄存器中有一个与ADP有关的中断等待处理。 0:无指示; 1:有指示。 | 0x0 |
| [7] | RO | host_ip | 指示Host event queue 中有一个与xHCI有关的中断等待处理。 0:无指示; 1:有指示。 | 0x0 |
| [6] | RO | device_ip | 指示Device event queue 中有一个与xHCI有关的中断等待处理。 0:无指示; 1:有指示。 | 0x0 |
| [5] | RO | csrtimeout | 指示软件访问寄存器的时间超出了DWC_USB3_CSR_ACCESS_TIMEOUT定义的时间。 0:无指示; 1:有指示。 | 0x0 |
| [4] | RO | buserraddrvld | 指示GBUSERRADDR寄存器是否有效并指出发生错误的首地址。 0:无指示; 1:有指示。 | 0x0 |
| [3:2] | RO | reserved | 保留。 | 0x0 |
| [1:0] | RO | curmod | 当前的工作模式: 00:Device模式; 01:Host 模式; 其他:保留。 | 0x0 |
PERI_USB3_GUCTL1
PERI_USB3_GUCTL1为全局用户控制寄存器1。
Offset Address: 0xC11C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:2] | RO | reserved | 保留。 | 0x00000000 |
| [1] | RW | ovrld_l1_susp_com | 如果此位写1,utmi_l1_suspend_com_n信号将会被utmi_sleep_n替代。此位一般会在当PHY进入L1 sleep模式下停止提供时钟的情况下置起。 | 0x0 |
| [0] | RW | loa_filter_en | 检测端口的关闭状态,当此位置1时,在端口关闭之前,controller将发送三个连续的cycle检查端口的状态。 | 0x0 |
PERI_USB3_GGPIO
PERI_USB3_GGPIO为全局GPIO 寄存器。
Offset Address: 0xC124 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | RW | gpo | 驱动gp_o[15:0]的值。 | 0x0000 |
| [15:0] | RO | gpi | 读取gp_i[15:0]的值。 | 0x0000 |
PERI_USB3_GUID
PERI_USB3_GUID为全局用户ID寄存器。
Offset Address: 0xC128 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | reserved | 用户信息,包括: 系统版本; 硬件配置。 | 0x00000000 |
PERI_USB3_GUCTL
PERI_USB3_GUCTL为全局用户控制寄存器。
Offset Address: 0xC12C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:22] | RW | refclkper | 参考时钟ref_clk用ns表示 例如:ref_clk=125MHz,则此处为1/125MHz=8ns。 | 0x000 |
| [21] | RW | noextrdl_ | SOF 包和第一个包之间的额外延时选择。 0:Host 在SOF包之后等待2ms 再发送第一个包; 1:Host 在SOF之后不延时直接发送第一个包。 | 0x0 |
| [20:18] | RW | psqextrressp | 保留 | 0x0 |
| [17] | RW | sprsctrltransen | 分散控制传输使能。 0:禁止; 1:使能。 一些Device对控制传输的响应很慢,在1帧/微帧内进行多次传输的话会导致Device行为紊乱。当此位被置1时,host控制器将把一个控制传输分散在不同的帧或者微帧中。 | 0x0 |
| [16] | RW | resbwhseps | 保留85%的带宽给高速周期性端点,只在HOST模式或者DRD模式下的Host操作模式下有效。 | 0x0 |
| [15] | RW | cmdevaddr | Device地址的模式。 1:根据每个设备分配地址命令递增; 0:设备地址等于Slot ID。 | 0x0 |
| [14] | RW | usbhstlnautoretryen | Host 输入传输自动重传使能。 0:自动重传功能关闭; 如果host 的输入传输发生错误,host变自动回复给device 一个终结的ACK(Retry = 1 and NumP = 0); 1:自动重传功能开启。 当自动重传功能开启后,如果host 的输入传输发生错误,host变自动回复给device 一个不是终结的ACK(Retry = 1 and NumP != 0)。 | 0x0 |
| [13] | RW | enoverlapchk | LFPS叠加信号检测使能。 0:不检测LFPS叠加信号; 1:检测LFPS叠加信号避免毛刺影响。 | 0x0 |
| [12] | RW | extcapsupten | 保留 | 0x0 |
| [11] | RW | csr | 在全速BULKOUT传输之间插入额外的延时。 0:不插入; 1:插入。 | 0x0 |
| [10:9] | RW | dtct | Device响应 Host 的Timeout粗略时间,若此位置0,则timeout时间由DTFT定义,若此位为非0,则: 00:0us; 01:500us; 10:1.5ms; 11:6.5ms。 | 0x0 |
| [8:0] | RW | dtft | Device响应 Host 的Timeout精确时间,DTCT为0的时候有效, T=DTFT*256*8 us。 | 0x000 |
PERI_USB3_GBUSERRADDR_HI
PERI_USB3_GBUSERRADDR_HI为全局总线错误地址高32位寄存器。
Offset Address: 0xC130 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | busaddrhi | 发生错误的高32位地址。 说明:只在GSTS.BusErrAddrVld为1时有效 只在复位时清0,只支持AHB和AXI的总线配置。 | 0x00000000 |
PERI_USB3_GBUSERRADDR_LO
PERI_USB3_GBUSERRADDR_LO为全局总线错误地址低32位寄存器。
Offset Address: 0xC134 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | busaddrlo | 发生错误的低32位地址。 说明:只在GSTS.BusErrAddrVld为1时有效 只在复位时清0,只支持AHB和AXI的总线配置。 | 0x00000000 |
PERI_USB3_GPRTBIMAP_HI
PERI_USB3_GPRTBIMAP_HI为超速端口-总线映射高32位寄存器。
Offset Address: 0xC138 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | reserved | 保留 | 0x00000000 |
PERI_USB3_GPRTBIMAP_LO
PERI_USB3_GPRTBIMAP_LO为超速端口-总线映射低32位寄存器。
Offset Address: 0xC13C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:4] | RO | reserved | 保留。 | 0x0000000 |
| [3:0] | RW | binumn | 指示当前连接的superspeed的总线号。 | 0x0 |
PERI_USB3_GPRTBIMAP_HS_HI
PERI_USB3_GPRTBIMAP_HS_HI为高速端口-总线映射高32位寄存器。
Offset Address: 0xC180 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | reserved | 保留。 | 0x00000000 |
PERI_USB3_GPRTBIMAP_HS_LO
PERI_USB3_GPRTBIMAP_HS_LO为高速端口-总线映射低32位寄存器。
Offset Address: 0xC184 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:4] | RO | reserved | 保留。 | 0x0000000 |
| [3:0] | RW | binumn | 指示当前连接的highspeed的总线号。 | 0x0 |
PERI_USB3_GPRTBIMAP_FS_HI
PERI_USB3_GPRTBIMAP_FS_HI为全速端口-总线映射高32位寄存器。
Offset Address: 0xC188 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | reserved | 保留。 | 0x00000000 |
PERI_USB3_GPRTBIMAP_FS
PERI_USB3_GPRTBIMAP_FS为全速端口-总线映射低32位寄存器。
Offset Address: 0xC18C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:4] | RO | reserved | 保留。 | 0x0000000 |
| [3:0] | RW | binumn | 指示当前连接的fullspeed的总线号。 | 0x0 |
PERI_USB3_GUSB2PHYCFGN
PERI_USB3_GUSB2PHYCFGN为全局USB2.0 PHY配置寄存器。
Offset Address: 0xC200 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31] | RW | phy_soft_rst | 触发usb2phy_reset信号对UTMI PHY 进行软复位。此处不对ULPI PHY进行复位,因为ULPIPHY是通过FunctionControl.Reset 寄存器进行复位的,当core复位的时候,core自动配置如下寄存器进行复位:vcc_reset_n, 小xHCI_USBCMD[hcrst], PERI_USB3_DCTL[SoftReset]or PERI_USB3_GCTL[SoftReset]。 | 0x0 |
| [30] | RW | u2_freeclk_exists | USB2 PHY是否提供free_clk。 0:不提供free clock; 1:提供free clock。 | 0x0 |
| [29:19] | RO | reserved | 保留。 | 0x000 |
| [18] | RW | ulpi_ext_vbus_indicator | ULPI接口外部Vbus指示。 0:PHY使用内部Vbus作为比较电压; 1:PHY使用外部Vbus作为比较电压。 | 0x0 |
| [17] | RW | ulpi_ext_vbus_drv | ULPI 外Vbus 驱动。 0:PHY 用内部VBUS 电压驱动; 1:PHY用外部VBUS 电压驱动。 | 0x0 |
| [16] | RO | reserved | 保留。 | 0x0 |
| [15] | RW | ulpi_auto_res | ULPI 自动唤醒。 0:PHY不启用自动唤醒功能; 1:PHY启用自动唤醒功能。 | 0x0 |
| [14] | RO | reserved | 保留。 | 0x0 |
| [13:10] | RW | usbtrdtim | USB2 周转时间(Turnround Time),指MAC 请求Packet FIFO Controller (PFC)从 DFIFO (SPRAM)取回数据的响应时间. 当16-bit UTMI+ 时:0x5 当8-bit UTMI+/ULPI接口时:0x9。 | 0x0 |
| [9] | RW | xcvrdly | 收发延时选择,当此位置1时,在Transceiver Select 被置为00(高速)和 TxValid 被拉为0之间加上2.5us的延时,用于发送chirp-K 握手信号。 | 0x0 |
| [8] | RW | enblslpm | utmi_sleep_n 和 utmi_l1_suspend_n信号使能。 0:utmi_sleep_n和utmi_l1_suspend_n 信号不接PHY; 1:utmi_sleep_n和utmi_l1_suspend_n 信号接PHY。 | 0x0 |
| [7] | RW | physel | PHY的接口类型选择。 0:USB2.0高速 UTMI+ 或者 ULPI PHY; 1:USB1.1全速串行接口; 当作为只写时,此bit为1。 | 0x0 |
| [6] | RW | susphy | USB2.0 HS/FS/LS PHY 挂起选择。 0:不挂起; 1:挂起。 说明:DRD 模式时,core初始化完毕后再将此bit置1。 | 0x0 |
| [5] | RW | fsintf | 全速PHY 串行接口类型选择。 0:6-pin 单向全速串行传输接口; 1:3-pin 双向全速串行传输接口。 当作为只读时,返回值为0。 | 0x0 |
| [4] | RW | ulpi_utmi_sel | 高速PHY 接口类型选择。 0:UTMI+ ; 1:ULPI。 | 0x0 |
| [3] | RW | phyif | UTMI 接口数据位宽选择。 0:8bits; 1:16bits。 | 0x0 |
| [2:0] | RW | toutcal | HS/FS Timeout 校准。 每个PHY clock加上相应的bit time High-speed 模式: One 30-MHz PHY clock = 16 bit times One 60-MHz PHY clock = 8 bit times Full-speed 模式: One 30-MHz PHY clock = 0.4 bit times One 60-MHz PHY clock = 0.2 bit times One 48-MHz PHY clock = 0.25 bit times | 0x0 |
PERI_USB3_GUSB3PIPECTLN
PERI_USB3_GUSB3PIPECTLN为全局USB3.0 PIPE控制寄存器
Offset Address: 0xC2C0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31] | RW | phy_soft_rst | USB3.0 软复位。 0:不复位; 1:复位。 | 0x0 |
| [30] | RW | hstprtcmpl | 保留。 | 0x0 |
| [29] | RW | u2ssinactp3ok | U2/SSInactive 状态时 PHY 的状态选择。 0:PHY进入P2状态; 1:PHY进入P3状态。 | 0x0 |
| [28] | RW | disrxdetp3 | p3状态接收检测使能。 0:如果PHY处于P3状态,并且core需要接收检测,则core会在P3状态下进行接收检测; 1:如果PHY处于P3状态,并且core需要接收检测,则Core会将PHY的状态转变为P2,再进行接收检测,在检测完毕后,core再将PHY的状态转换回P2。 | 0x0 |
| [27] | RW | ux_exit_in_px | core状态切换时,PHY的状态选择。 0:core退出U1/U2/U3状态时处于PHY的P0状态; 1:core退出U1/u2/u3状态时处于PHY的相对应的P1/P2/P3状态。 | 0x0 |
| [26] | RW | ping_enhancement_en | 下行端口 U1 的ping命令的timeout从500ms变为300ms。 0:不变化; 1:变化。 | 0x0 |
| [25] | RW | u1u2exitfail_to_recov | P2状态下退出P3的信号选择。 当此位被置1时,core会在发出退出U3的握手信号之前,将PHY的状态置为P2。 | 0x0 |
| [24] | RW | request_p1p2p3 | 当core从状态U0切换到U1/U2/U3时,core总是会请求PHY从状态P0切换到P1/P2/P3 0:不切换; 1:切换。 | 0x0 |
| [23] | RW | startrxdetu3rxdet | 需固定为0。 | 0x0 |
| [22] | RW | disrxdetu3rxdet | 需固定为0。 | 0x0 |
| [21:19] | RW | delayp1p2p3 | P0到P1/P2/P3状态的延时 当core进入U1/U2/U3状态时,延长P0进入P1/P2/P3的时间,直到Pipe3_RxValid 被拉为0,或者发生8B10B的错误。 说明:第18bit必须被置为1时才有效。 | 0x0 |
| [18] | RW | delay_phy_powerchange | PHY 状态切换延时寄存器。 0:当core从U0进入U1/U2/U3状态时,PHY直接进入P1/P2/P3状态,不需要查看Pipe3_RxElecIlde和 pipe3_RxValid 的值; 1:当core从U0进入U1/U2/U3状态时,PHY到P1/P2/P3的状态将会被延时,直到Pipe3_RxElecIlde 为1 和 pipe3_RxValid 为0。 | 0x0 |
| [17] | RW | suspend_en | USB3.0 PHY挂起使能。 0:不挂起; 1:挂起。 说明:DRD 模式时,core初始化完毕后再将此bit置1。 | 0x0 |
| [16:15] | RW | datwidth | PIPE接口的数据位宽。 00:32 bits; 01:16 bits; 10:8 bits; 其他:保留。 | 0x0 |
| [14] | RW | abortrxdetinu2 | 取消U2状态下的Rx Detect。 0:不取消; 1:取消。 当此位被置1并且连接状态时U2时,core接收到远端连接设备发送的U2退出信号时,将不会采取接收检测。 | 0x0 |
| [13] | RW | skiprxdet | 跳过 Rx Detect状态。 0:不跳过; 1:跳过。 如果此位被置1,当pipe3_RxElecIdle被拉低时,将跳过Rx Detection。 | 0x0 |
| [12] | RW | lfps_p0_align | 控制器退出U1/U2/U3状态时在请求PHY P0的信号的时钟边沿终止发送LFPS,否则LFPS信号将早一个cycle之前发送 当PHY从P1或P2状态切换到P0状态时,在PHY设置PhyStatus以后2个时钟周期,控制器请求传输。 | 0x0 |
| [11] | RW | p3p2_tran_ok | P3/P2状态直接切换。 0:PHY 每次进行P2P3质检的切换都需要经过中间状态P0; 1:PHY的双胎直接从P2切换到P3,或者直接从P3切换到P2,不需要经过中间状态P0。 | 0x0 |
| [10] | RW | p3exsigp2 | P3退出状态选择。 当此位为1时,当core从U3退出时,PHY的状态一定是从P3退出到P2,否则可从P3退出到p1或者P0。 | 0x0 |
| [9] | RW | lfps_filter | LFPS 过滤。 0:不过滤; 1:过滤。 当此位置1时,控制器将过滤来自PHY的LFPS信号除非pipe3_Rxelecidle 和 pipe3_RxValid被撤销。 | 0x0 |
| [8] | RW | polling_lfps_control | RX_DETECT 到Polling.LFPS 控制。 0:(默认值)RX_DETECT后延时400us开始Polling LFPS; 1:RX_DETECT后不加延时直接开始Polling LFPS。 | 0x0 |
| [7] | RO | reserved | 保留。 | 0x0 |
| [6] | RW | txswing | PIPE接口发送摆幅。 0:Full swing; 1:Low swing。 | 0x0 |
| [5:3] | RW | txmargin | PIPE接口发送端余量。 000:Normal; 001:800-1200mV Full Swing/400-700mV Half Swing; 101-111:200-400mV Full Swing/100-200mV Half Swing。 | 0x0 |
| [2:1] | RW | txdeemphasis | PIPE接口发送端预加重。 00:-6Db; 01:-3.5Db; 10:No Deemphesis; 11:保留。 | 0x0 |
| [0] | RW | elastic_buffer_mode | 弹性buffer模式选择使能。 0:禁止; 1:使能。 | 0x0 |
PERI_USB3_GTXFIFOSIZN
PERI_USB3_GTXFIFOSIZN为全局发送FIFO大小寄存器。
Offset Address: 0xC304 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | RW | txfstaddr_n | Transmit FIFOn RAM 在memory 中的起始地址。 | 0x0000 |
| [15:0] | RW | txfdep_n | Transmit FIFO 深度。 最小:32 MDWIDTH-bit words; 最大:32768 MDWIDTH-bit words。 | 0x0000 |
PERI_USB3_GRXFIFOSIZN
PERI_USB3_GRXFIFOSIZN为全局接收FIFO大小寄存器。
Offset Address: 0xC384 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | RW | rxfstaddr_n | Receive FIFOn RAM 在memory 中的起始地址。 | 0x0000 |
| [15:0] | RW | rxfdep_n | Receive FIFO 深度。 最小:32 MDWIDTH-bit words; 最大:32768 MDWIDTH-bit words。 | 0x0000 |
PERI_USB3_GEVNTADRN_HI
PERI_USB3_GEVNTADRN_HI为全局event buffer的地址高32位寄存器。
Offset Address: 0xC410 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RWSC | evntadrhi | Event Buffer 高32位地址。 | 0x00000000 |
PERI_USB3_GEVNTADRN_LO
PERI_USB3_GEVNTADRN_LO为全局event buffer的地址低32位寄存器。
Offset Address: 0xC414 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RWSC | evntadrlo | Event Buffer 低32位地址。 | 0x00000000 |
PERI_USB3_GEVNTSIZN
PERI_USB3_GEVNTSIZN为全局event buffer的大小寄存器。
Offset Address: 0xC418 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31] | RW | evntintmask | Event 中断 Mask。 | 0x0 |
| [30:16] | RO | reserved | 保留。 | 0x0000 |
| [15:0] | RW | evntsiz | Event Buffer 大小(byte)。 | 0x0000 |
PERI_USB3_GEVNTCOUNTN
PERI_USB3_GEVNTCOUNTN为全局event buffer的计数寄存器。
Offset Address: 0xC41C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | RO | reserved | 保留。 | 0x0000 |
| [15:0] | RWSC | evntcount | 当读此寄存器的时候,返回Event Buffer中有效的event数;当写此寄存器的时候,硬件将自减写入的count数。 | 0x0000 |
PERI_USB3_GTXFIFOPRIDEV
PERI_USB3_GTXFIFOPRIDEV为外设的全局TX FIFO DMA优先寄存器。
Offset Address: 0xC610 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:1] | RO | reserved | 保留。 | 0x00000000 |
| [0] | RW | device_txfifo_priority | Device TXFIFO 优先级。 0:low; 1:high。 | 0x0 |
PERI_USB3_GTXFIFOPRIHST
PERI_USB3_GTXFIFOPRIHST为Host的全局TX FIFO DMA优先寄存器。
Offset Address: 0xC618 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:1] | RO | reserved | 保留。 | 0x00000000 |
| [0] | RW | host_txfifo_priority | Host TXFIFO 优先级。 0:low; 1:high。 | 0x0 |
PERI_USB3_GRXFIFOPRIHST
PERI_USB3_GRXFIFOPRIHST为Host的全局RX FIFO DMA优先寄存器。
Offset Address: 0xC61C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:1] | RO | reserved | 保留。 | 0x00000000 |
| [0] | RW | host_rxfifo_priority | Host RXFIFO 优先级。 0:low; 1:high。 | 0x0 |
PERI_USB3_GFIFOPRIDBC
PERI_USB3_GFIFOPRIDBC为host的全局 Debug 性能时DMA优先寄存器。
Offset Address: 0xC620 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:2] | RO | reserved | 保留。 | 0x00000000 |
| [1:0] | RW | host_dbc_dma_priority | Host DbC DMA 优先级。 00:Low; 01:Normal; 10:High; 其他:保留。 | 0x0 |
PERI_USB3_GDMAHLRATIO
PERI_USB3_GDMAHLRATIO为host的全局 FIFO DMA高、低优先权比例寄存器。
Offset Address: 0xC624 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:13] | RO | reserved | 保留。 | 0x00000 |
| [12:8] | RW | hst_rxfifo_dma_hilo_priority_ratio | Host RXFIFO DMA 高-低 优先级 比例。 | 0x00 |
| [7:5] | RO | reserved | 保留。 | 0x0 |
| [4:0] | RW | hst_txfifo_dma_hilo_priority_ratio | Host TXFIFO DMA 高-低 优先级 比例。 | 0x00 |
PERI_USB3_GFLADJ
PERI_USB3_GFLADJ为GFLADJ为全局帧长度调整寄存器。
Offset Address: 0xC630 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31] | RW | gfladj_refclk_240mhzdecr_pls1 | GFLADJ_REFCLK_240MHZ_DECR/ref_frequency的精度调整。 0:余数小于0.5; 1:余数大于等于0.5。 | 0x0 |
| [30:24] | RW | gfladj_refclk_240mhz_decr | 以240/ref_clk_frequency计算得出的计数器值: GFLADJ_REFCLK_240MHZ_DECR = 240/ref_clk_frequency。 | 0x00 |
| [23] | RW | gfladj_refclk_lpm_sel | SOF/ITP计数时钟选择。 若此位被置1,则SOF/ITP已ref_clk为时钟计数。 | 0x0 |
| [22] | RO | reserved | 保留 | 0x0 |
| [21:8] | RW | gfladj_refclk_fladj | 当bit[23]为1时,SOF/ITP校准值 FLADJ_REF_CLK_FLADJ=((125000/ref_clk_period_integer)-(125000/ref_clk_period)) * ref_clk_period。 | 0x0000 |
| [7] | RW | gfladj_30mhz_reg_sel | SOF/ITP校准选择信号。 0:控制器用 fladj_30mhz_reg 的值来对SOF/ITP进行校准; 1:控制器用 GFLADJ.GFLADJ_30MHZ 的值来对SOF/ITP进行校准。 | 0x0 |
| [6] | RO | reserved | 保留。 | 0x0 |
| [5:0] | RW | gfladj_30mhz | 当第bit[7]为1且SOF/ITP以UTMI/ULPI为时钟计数时,控制器用 此域的值来对SOF/ITP进行校准。 | 0x00 |
PERI_USB3_DCFG
PERI_USB3_DCFG为外设配置寄存器。
Offset Address: 0xC700 Total Reset Value: 0x0008_0004
| Bits | Access | Name | Description | Reset |
| [31:24] | RO | reserved | 保留。 | 0x00 |
| [23] | RW | ignore_stream_pp | 忽略Packet Pending 比特位。 0:不忽略; 1:忽略。 | 0x0 |
| [22] | RW | lpm_capable | LPM功能选择。 0:LPM功能开启; 1:LPM功能关闭。 | 0x0 |
| [21:17] | RW | number_of_receive_buffers | 接收Buffer号。 指示ACK TP中返回的接收buffer号。 | 0x04 |
| [16:12] | RW | interrupt_number | 中断号指示。 指示设备产生的非端点中断的中断号。 | 0x00 |
| [11:10] | RO | reserved | 保留。 | 0x0 |
| [9:3] | RW | device_address | 设备地址。 每当Device接收到SetAddress命令,对此处配置device的地址。USB复位后,此处清0。 | 0x00 |
| [2:0] | RW | device_speed | Device 传输速率选择。 000:高速; 001:全速; 100:超速; 其他:保留。 | 0x4 |
PERI_USB3_DCTL
PERI_USB3_DCTL为外设控制寄存器。
Offset Address: 0xC704 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31] | RW | run_stop | 设备开启/停止选择。 软件写1开启device的操作;如果要停止device操作,先停止一切的正在进行的传输,在往此bit写0。 Run/stop比特的必须在如下的情况下操作: 1.上电复位后,软件必须给此位写1以初始化device控制器,否则device controller 将不会知会host 已经连接上; 2.如果软件要在软断开或者检测到断开事件后重新启动连接,则需要往此比特写1之前将DCTL[8:5]设置成5; 3.当USB处于低功耗状态并且USB是双电源域配置,软件对此比特写0意味着将关闭core电源域。在软件重启core 电源域和device控制器后,将此比特置1。 | 0x0 |
| [30] | RWSC | soft_core_reset | core 软复位。 将对所有时钟域的中断和寄存器做如下操作: 1:清除所有中断和复位出一下寄存器以外的所有寄存器; - GCTL - GUCTL - GSTS - GSNPSID - GGPIO - GUID - GUSB2PHYCFGn registers - GUSB3PIPECTLn registers - DCFG - DCTL - DEVTEN - DSTS 2:所有状态机将回归IDLE状态,所有的FIFO将清0; 3:SoC总线上的所有传输将立刻终止。 | 0x0 |
| [29] | RO | reserved | 保留。 | 0x0 |
| [28:24] | RW | hird_threshold | HIRD 门限值 core将在满足以下的条件下产生utmi_l1_suspend_n 和 utmi_sleep_n信号。 1.当满足下面的条件时,core在L1状态产生utmi_l1_suspend_n ,将PHY切换到深度Low-Power: -HIRD的值大于或者等于DCTL.HIRD_Thres[3:0] -HIRD_Thres[4]的值为1 2.当满足以下条件时,core在L1状态将产生utmi_sleep_n: -HIRD的值小于HIRD_Thres[3:0] -HIRD_Thres[4]的值为0 | 0x00 |
| [23] | RW | appl1res | LPM 响应配置。 当PERI_USB3_DCFG[lpm_capable]为 0:core没有响应; 当PERI_USB3_DCFG[lpm_capable]为 1: 0:当满足下面的条件时,LPM收发成功后将返回ACK -没有校验错误 -接收到有效的bLinkState = 0001B (L1) -发送FIFO中没有存留数据并且OUT端点没有处于flow controlled state (NYET除外) 1:当满足下面的条件时,LPM收发成功后将返回ACK -没有校验错误 -接收到有效的bLinkState = 0001B (L1)。 | 0x0 |
| [22:20] | RO | reserved | 保留。 | 0x0 |
| [19] | RW | keepconnect | 保持连接状态。 如果此位被置1时,当runStop =0时,所有涉及模型将得到保存或被恢复。同时,当link进入U3或者L2时,将使能Hibernation Request Event。 | 0x0 |
| [18] | RW | l1_hibernation_en | 当keepconnect为1,并且此位为1,如果L1 被使能 并且HIRD的值大于PERI_USB3_DCTL[hird_ threshold] 中配置的门限值,device core将产生一个Hibernation Request Event。 | 0x0 |
| [17] | RW | controller_restore_state | 控制器恢复状态。 当软件对此比特写1时,控制器立即将DSTS.RSS置1,当控制器完成恢复以后,将PERI_USB3_DSTS[rss]置0。 说明:当读此比特的时候,返回0。 | 0x0 |
| [16] | RW | controller_save_state | 控制器保存状态。 当软件对此比特写1时,控制器立即将DSTS.SSS置1,当控制器保存以后,将PERI_USB3_DSTS[sss]置0。 说明:当读此比特的时候,返回0。 | 0x0 |
| [15:13] | RO | reserved | 保留。 | 0x0 |
| [12] | RW | initiate_u2_enable | 初始化U2使能寄存器。 0:不初始化U2; 1:初始化U2。 | 0x0 |
| [11] | RW | accept_u2_enable | U2状态使能。 0:core拒绝进入U1状态除非;Force_LinkPM_Accep 为1 1:如果用户端没有任何设备在等待,则core可以接受允许进入U2状态。 说明:USB复位后,硬件自动清除此比特位。 | 0x0 |
| [10] | RW | initiate_u1_enable | 初始化U1使能寄存器。 0:不初始化U1; 1:初始化U1。 | 0x0 |
| [9] | RW | accept_u1_enable | U1状态使能。 0:core拒绝进入U1状态除非;Force_LinkPM_Accep 为1; 1:如果用户端没有任何设备在等待,则core可以接受允许进入U1状态 说明:USB复位后,硬件自动清除此比特位。 | 0x0 |
| [8:5] | WO | ulstchngraq | USB/Link 状态切换请求。 软件对配置此处发起相应的状态切换请求 SS模式: 0x0:No Action; 0x4:SS.Disabled; 0x5:Rx.Detect; 0x6:SS.Inactive; 0x8:Recovery; 0xA:Compliance; 其他:保留。 HS/FS/LS模式: 0x8:Remote wakeup request; 其他:保留。 | 0x0 |
| [4:1] | RW | test_control | 测试控制。 0x0:Test mode 关闭; 0x1:Test_J mode; 0x2:Test_K mode; 0x3:Test_SE0_NAK mode; 0x4:Test_Packet mode; 0x5:Test_Force_Enable; 其他:保留。 | 0x0 |
| [0] | RO | reserved | 保留。 | 0x0 |
PERI_USB3_DEVTEN
PERI_USB3_DEVTEN为外设事件使能寄存器。
Offset Address: 0xC708 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:10] | - | reserved | 保留。 | 0x000000 |
| [9] | RW | erratic_error_event_enable | 不规则错误事件使能。 0:禁止; 1:使能。 | 0x0 |
| [8] | RO | reserved | 保留。 | 0x0 |
| [7] | RW | sof_en | SOF包使能。 0:禁止; 1:使能。 | 0x0 |
| [6] | RW | u3l2l1_susp_en | U3/L2-L1挂起事件使能。 0:禁止; 1:使能。 | 0x0 |
| [5] | RW | hibernation_req_evt_en | 休眠请求使能。 0:禁止; 1:使能。 | 0x0 |
| [4] | RW | wkup_evt_en | 恢复/远程唤醒检测事件使能。 0:禁止; 1:使能。 | 0x0 |
| [3] | RW | ulst_cng_en | USB/LINk 状态切换事件使能。 0:禁止; 1:使能。 | 0x0 |
| [2] | RW | connect_done_en | 连接完成使能。 0:禁止; 1:使能。 | 0x0 |
| [1] | RW | usbrst_en | USB复位使能。 0:禁止; 1:使能。 | 0x0 |
| [0] | RW | disconn_evt_en | 断开检测使能。 0:禁止; 1:使能。 | 0x0 |
PERI_USB3_DSTS
PERI_USB3_DSTS为外设状态寄存器。
Offset Address: 0xC70C Total Reset Value: 0x0012_0004
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:30] | RO | reserved | 保留。 | 0x0 |
| [29] | RO | dcnrd | Device控制器未准备好。 指示控制器从休眠状态退出后,正在进行状态转换。 | 0x0 |
| [28:26] | RO | reserved | 保留。 | 0x0 |
| [25] | RO | rss | 恢复状态。 当控制器完成恢复的操作后,将此位置0。 | 0x0 |
| [24] | RO | sss | 保存状态。 当控制器完成保存的操作后,将此位置0。 | 0x0 |
| [23] | RO | core_idle | core 空闲状态。 指示core完成了所有RxFIFO的数据向系统memory的传输,完成所有链表的输出,所有事件计数器归0。 | 0x0 |
| [22] | RO | devctrlhlt | Device 控制器挂起。 当PERI_USB3_DCTL[run_stop]为1的时候,此位置0; 当软件向PERI_USB3_DCTL[run_stop]写0后,并且core处于空闲状态以及更下一层完成断开的操作,core将对此位写1。 | 0x0 |
| [21:18] | RO | usb_lnk_st | USB/Link 状态。 SS 模式: 0x0:U0; 0x1:U1; 0x2:U2; 0x3:U3; 0x4:SS_DIS; 0x5:RX_DET; 0x6:SS_INACT; 0x7:POLL; 0x8:RECOV; 0x9:HRESET; 0xa:CMPLY; 0xb:LPBK; 0xf:Resume/Reset; 其他:保留。 HS/FS/LS 模式: 0x0: On 状态; 0x2: Sleep (L1) 状态; 0x3: Suspend (L2) 状态; 0x4: Disconnected 状态 (默认状态); 0x5: Early Suspend 状态(仅当休眠功能关闭是有效); 0xe: Reset (仅当休眠功能开启时有效); 0xf: Resume (仅当休眠功能开启时有效); 其他:保留。 | 0x4 |
| [17] | RO | reserved | 保留。 | 0x1 |
| [16:3] | RO | soffn | SOF帧/微帧数目: HS模式 [16:6]指示帧数目 [5:3]指示微帧数目 全速模式 [16:14]不用 [13:3]指帧数目 | 0x0000 |
| [2:0] | RO | connect_spd | 连接速度指示。 000:高速(PHY clock工作在30 或者60MHz); 001:全速(PHY clock工作在30 或者60MHz); 010:低速 (PHY clock工作在6MHz); 010:低速 (PHY clock工作在48MHz)100:超速(PHY clock工作在125 或者250MHz)。 | 0x4 |
PERI_USB3_DGCMDPAR
PERI_USB3_DGCMDPAR为外设类命令参数寄存器。
Offset Address: 0xC710 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | parameter31_0 | 配置外设类命令参数寄存器。 | 0x00000000 |
PERI_USB3_DGCMD
PERI_USB3_DGCMD为外设类命令寄存器。
Offset Address: 0xC714 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:16] | RO | reserved | 保留。 | 0x0000 |
| [15] | RO | cmd_status | 命令状态。 0:Device 控制器处理命令成功; 1:Device 控制器处理命令时遇到错误。 | 0x0 |
| [14:11] | RO | reserved | 保留。 | 0x0 |
| [10] | RWSC | cmdact | 软件设置此位为1,使能Device控制器执行产生的命令 控制器执行完命令后将此位置0。 | 0x0 |
| [9] | RO | reserved | 保留。 | 0x0 |
| [8] | WO | cmdloc | 命令完成中断。 说明:PERI_USB3_DCTL[run_stop] 为0时,此位为1。 | 0x0 |
| [7:4] | RO | reserved | 保留。 | 0x0 |
| [3:0] | RW | cmdtyp | 命令类型。 0x0:保留; 0x1:设置端点的配置; 0x2:设置端点传输源配置; 0x3:获取端点状态; 0x4:设置挂起; 0x5:清除挂起; 0x6:开始传输; 0x7:跟新传输; 0x8:结束传输; 0x9:开始新的配置; 其他:保留。 | 0x0 |
PERI_USB3_DALEPENA
PERI_USB3_DALEPENA为外设USB端点使能寄存器。
Offset Address: 0xC718 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | usbactep | 指示了在当前的配置和接口下,USB的端口是否有效。对于USB输入端点0-15和输出端点0-15,所有32个端点每个通过1bit来控制,偶数位控制输出端点,奇数位控制输入端点。例: Bit[0]:USB输出端点0 Bit[1]:USB输入端点0 Bit[2]:USB输出端点1 Bit[3]:USB输入端点1 对该寄存器操作时必须设置bit0和bit1,这样USBReset后才会使能物理端点中的控制端点。 当探测到USB reset时,应用软件会清除除了输出端点0/输入端点0其他所有端点对应的位。当收到设置配置和设置接口要求时,应用程序相应的设置端点寄存器以及本寄存器的这些位。 | 0x00000000 |
PERI_USB3_DEPCMDPAR2N
PERI_USB3_DEPCMDPAR2N为外设端点命令参数寄存器2。
Offset Address: 0xC810 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | parameter2 | 外设的物理端点命令参数寄存器2,该寄存器必须在执行命令之前进行配置。 | 0x00000000 |
PERI_USB3_DEPCMDPAR1N
PERI_USB3_DEPCMDPAR1N为外设端点命令参数寄存器1。
Offset Address: 0xC814 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | parameter1 | 外设的物理端点命令参数寄存器1,该寄存器必须在执行命令之前进行配置。 | 0x00000000 |
PERI_USB3_DEPCMDPAR0N
PERI_USB3_DEPCMDPAR0N为外设端点命令参数寄存器0。
Offset Address: 0xC818 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | parameter0 | 外设的物理端点命令参数寄存器0,该寄存器必须在命令之前或者伴随着进行配置。因为命令仅仅需要32bit的参数,所以该寄存器必须随着命令寄存器进行配置。 | 0x00000000 |
PERI_USB3_DEPCMDN
PERI_USB3_DEPCMDN为外设物理端点命令寄存器。
Offset Address: 0xC81C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | RW | command_parameters | 这些bit表示命令的参数,往寄存器写相关值其意义如下: 对于开始传输命令: [31:16]:表示为本次传输申明的USB StreamID。 对于实时端点的开始传输命令: [31:16]:表示首个TRB应用时的微帧(帧)的数目。 对于更新传输、结束传输和开始新的配置命令: [22:16]:传输资源索引(XferRscIdx)。硬件为传输申明传输资源索引,其返回后来响应开始传输命令;应用软件为开始新的配置命令声明传输资源索引。 | 0x0000 |
| [15:12] | RW | cmd_status | 命令完成状态:这些位保存了已完成命令的额外信息。这些信息与端点命令完成事件的bit[15:12]完全相同。 | 0x0 |
| [11] | RW | hipri_forcerm | HighPriority:仅在开始传输命令才有效。 ForceRM:仅在结束传输命令才有效。 | 0x0 |
| [10] | RW | cmd_act | 软件设置该bit为1来使能外设端点控制器执行类命令。 当本寄存器的CmdStatus有效,同时端点已经准备好来接收另一个命令时,外设控制器将会设置该bit为0。但是这并不能表明先前发送的命令都已实现。 | 0x0 |
| [9] | RO | reserved | 保留。 | 0x0 |
| [8] | RW | cmdloc | 命令完成中断:当该bit设置为1时,表明执行命令后,外设控制器产生了一个通用的端点命令完成事件。 说明:当PERI_USB3_DCTL[run_stop]=0时,该bit不能设置为1。 | 0x0 |
| [7:4] | RO | reserved | 保留。 | 0x0 |
| [3:0] | RW | cmdtyp | 定义了驱动要求core去执行的命令类型。 0x0:保留; 0x1:设置端点配置(64或96bit参数); 0x2:设置端点传输资源配置(32bit参数); 0x3:得到端点状态(不需要参数); 0x4:设置Stall(不需要参数); 0x5:清除Stall(不需要参数); 0x6:开始传输(64bit参数); 0x7:更新传输(不需要参数); 0x8:结束传输(不需要参数); 0x9:开始新的配置(不需要参数); 其他:保留。 | 0x0 |
LSADC
概述
LSADC(Low Speed ADC)实现对外部模拟信号转换成一定比例的数字值,从而实现对模拟信号的测量,可应用于电量检测,按键检测等。
芯片提供1个LSADC,4个独立通道;
特点
LSADC具有以下特点:
- 电源电压1.8V;
- 扫描频率不能高于200K/s;
- 10bit采样精度,4个独立通道;
- 支持单次扫描和连续扫描模式;
- 支持16次平均算法模式和32次平均算法模式;
- 扫描完成自动上报中断。
工作方式
在单次读取模式(LSADC_CTRL0 [model_sel]=0),CPU配置扫描通道号(仅且只能配置一个通道)、扫描模式、键值映射表信息,启动LSADC完成一次通道扫描。通道扫描完成后,通过中断通知系统扫描完成,CPU可以获取转换结果。
单次扫描处理流程

连续扫描处理流程
在连续读取模式(LSADC_CTRL0 [model_sel]=1),CPU根据应用场景设置连续扫描的时间间隔Tscan、毛刺宽度(Tglitch)、有效通道号(ch_vld),启动LSADC。LSADC在一个时间间隔Tscan内完成一个有效通道(配置LSADC_CTRL0通道是否有效指示位为有效)的扫描。在下一个扫描时刻到来时,启动对下一个有效通道的扫描。待完成对所有有效通道的扫描后,启动下一轮对有效通道的扫描。
以使能通道0、1为例,连续扫描模式下通道轮询扫描示意图如图14-65所示。


滤毛刺流程
滤毛刺电路采用多数判决算法。在滤毛刺窗口Tglitch中,如果出现多数次的ADC采样值value,且value不为空按键时ADC采样值,则认为value为一次有效的按键值,否则认为是一个毛刺信号。
- 在单次读取模式,不进行滤毛刺操作。
- 在连续扫描模式下,使能虑毛刺功能,需要设置合适的虑毛刺时间窗口Tglitch。请参考LSADC_CTRL1寄存器的描述。
采样精度设置
通过LSADC_CTRL9 [9:0]可以设置采样精度,可以根据应用需要设置对应的采样精度。
- 当采样精度设置成10bit时,采样结果10bit全部有效。
- 当采样精度设置小于10bit时,对应的采样结果高位有效,例如:当采样精度设置成8bit时,采样结果的高8bit才有效。
平均算法设置
通过LSADC_CTRL9 [12]可以选择通道采样的平均算法模式,可以根据应用需要设置对应的平均算法模式。请参考LSADC_CTRL0寄存器的描述。
- 单次读取模式,不支持采样平均算法操作。
- 连续扫描模式,可选择16次或32次平均算法。
以使能16次平均算法模式为例,连续扫描模式下通道平均算法示意图如图14-67所示。

LSADC寄存器概览
LSADC寄存器概览如表14-32所示。
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x0000 | LSADC_CTRL0 | LSADC配置寄存器 | 14-285 |
| 0x0004 | LSADC_CTRL1 | 滤毛刺配置寄存器 | 14-286 |
| 0x0008 | LSADC_CTRL2 | 扫描间隔配置寄存器 | 14-287 |
| 0x0010 | LSADC_CTRL4 | 中断使能寄存器 | 14-287 |
| 0x0014 | LSADC_CTRL5 | 中断状态寄存器 | 14-287 |
| 0x0018 | LSADC_CTRL6 | 中断清除寄存器 | 14-288 |
| 0x001C | LSADC_CTRL7 | Start配置寄存器 | 14-289 |
| 0x0020 | LSADC_CTRL8 | Stop配置寄存器 | 14-289 |
| 0x0024 | LSADC_CTRL9 | 转换结果精度寄存器 | 14-289 |
| 0x0028 | LSADC_CTRL10 | LSADC_ZERO寄存器 | 14-290 |
| 0x002C | LSADC_CTRL11 | LSADC通道0数据寄存器 | 14-290 |
| 0x0030 | LSADC_CTRL12 | LSADC通道1数据寄存器 | 14-290 |
| 0x0034 | LSADC_CTRL13 | LSADC通道2数据寄存器 | 14-291 |
| 0x0038 | LSADC_CTRL14 | LSADC通道3数据寄存器 | 14-291 |
| 0x0050 | LSADC_CTRL20 | LSADC通道0平均算法数据寄存器 | 14-291 |
| 0x0054 | LSADC_CTRL21 | LSADC通道1平均算法数据寄存器 | 14-292 |
| 0x0058 | LSADC_CTRL22 | LSADC通道2平均算法数据寄存器 | 14-292 |
| 0x005C | LSADC_CTRL23 | LSADC通道3平均算法数据寄存器 | 14-293 |
LSADC寄存器描述
LSADC_CTRL0
LSADC_CTRL0为LSADC配置寄存器。
Offset Address: 0x0000 Total Reset Value: 0x0000_800F
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:24] | - | reserved | 保留。 | 0x00 |
| [23:20] | RW | lsadc_data_delta | LSADC转换结果误差范围(在连续扫描模式下使用,使用确定两次转换结果间的误差范围,在误差范围内,则认定两次转换结果相同)。 | 0x0 |
| [19:18] | - | reserved | 保留。 | 0x0 |
| [17] | RW | deglitch_bypass | 滤毛刺功能bypass。(此功能在连续扫描模式下使用) 0:使能滤毛刺功能; 1:bypass。 | 0x0 |
| [16] | - | reserved | 保留。 | 0x0 |
| [15] | RW | lsadc_reset | 设置LSADC是否进入复位状态。 1:进入复位状态; 0:退出复位状态。 | 0x1 |
| [14] | - | reserved | 保留。 | 0x0 |
| [13] | RW | model_sel | LSADC扫描模式选择。 0:单次扫描模式; 1:连续扫描模式。 | 0x0 |
| [12] | RW | equ_model_sel | LSADC平均算法模式选择。 0:16次平均算法模式; 1:32次平均算法模式。 | 0x0 |
| [11] | RW | ch_3_vld | LSADC通道3是否有效。 0:无效; 1:有效。 | 0x0 |
| [10] | RW | ch_2_vld | LSADC通道2是否有效。 0:无效; 1:有效。 | 0x0 |
| [9] | RW | ch_1_vld | LSADC通道1是否有效。 0:无效; 1:有效。 | 0x0 |
| [8] | RW | ch_0_vld | LSADC通道0是否有效。 0:无效; 1:有效。 | 0x0 |
| [7:4] | - | reserved | 保留。 | 0x3F |
| [3] | RW | ch_3_ eq_enable | LSADC通道3采样平均算法是否有效。 0:无效; 1:有效。 | 0x1 |
| [2] | RW | ch_2_ eq_enable | LSADC通道2采样平均算法是否有效。 0:无效; 1:有效。 | 0x1 |
| [1] | RW | ch_1_ eq_enable | LSADC通道1采样平均算法是否有效。 0:无效; 1:有效。 | 0x1 |
| [0] | RW | ch_0_ eq_enable | LSADC通道0采样平均算法是否有效。 0:无效; 1:有效。 | 0x1 |
LSADC_CTRL1
LSADC_CTRL1为滤毛刺配置寄存器。
Offset Address: 0x0004 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | glitch_sample | 滤毛刺时间窗口(当LSADC的转换结果在此时间窗口内保持不变时,则认为此转换结果为有效值,否则则认为是毛刺,此窗口值一般设为ms级,在连续扫描模式下不能配置为0)。 | 0x00000000 |
LSADC_CTRL2
LSADC_CTRL2为扫描间隔配置寄存器。
Offset Address: 0x0008 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | time_scan | 在连续扫描模式下,两个扫描通道之间连续扫描的时间间隔。时间间隔为 Tscan=time_scan*0.333us(连续扫描时间间隔应该大于LSADC的转换时间,即配置值不能少于0x20)。 | 0x00000000 |
LSADC_CTRL4
LSADC_CTRL4为中断使能寄存器。
Offset Address: 0x0010 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:1] | - | reserved | 保留。 | 0x00000000 |
| [0] | RW | int_enable | 扫描值有效中断使能位。 0:不使能; 1:使能。 | 0x0 |
LSADC_CTRL5
LSADC_CTRL5为中断状态寄存器。
Offset Address: 0x0014 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:5] | - | reserved | 保留。 写无效,读为0。 | 0x00000000 |
| [4] | RO | lsadc_auto_busy | 在自动扫描模式下,LSADC busy状态指示。 0:IDLE; 1:BUSY。 | 0x0 |
| [3] | RO | int_flag_in3 | 通道3扫描值有效中断标志位。 0:无中断; 1:有中断。 | 0x0 |
| [2] | RO | int_flag_in2 | 通道2扫描值有效中断标志位。 0:无中断; 1:有中断。 | 0x0 |
| [1] | RO | int_flag_in1 | 通道1扫描值有效中断标志位。 0:无中断; 1:有中断。 | 0x0 |
| [0] | RO | int_flag_in0 | 通道0扫描值有效中断标志位。 0:无中断; 1:有中断。 | 0x0 |
LSADC_CTRL6
LSADC_CTRL6为中断清除寄存器。
Offset Address: 0x0018 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:4] | - | reserved | 保留。 | 0x0000000- |
| [3] | WO | clr_int_flag_in3 | 通道3中断清除寄存器。 0:不清除; 1:清除中断。 | 0x0 |
| [2] | WO | clr_int_flag_in2 | 通道2中断清除寄存器。 0:不清除; 1:清除中断。 | 0x0 |
| [1] | WO | clr_int_flag_in1 | 通道1中断清除寄存器。 0:不清除; 1:清除中断。 | 0x0 |
| [0] | WO | clr_int_flag_in0 | 通道0中断清除寄存器。 0:不清除; 1:清除中断。 | 0x0 |
LSADC_CTRL7
LSADC_CTRL7为Start配置寄存器。
Offset Address: 0x001C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | WO | start | LSADC启动信号(向此寄存器写任意值都可以启动LSADC)。 | 0x00000000 |
LSADC_CTRL8
LSADC_CTRL8为Stop配置寄存器。
Offset Address: 0x0020 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | WO | stop | 停止自动扫描(在自动扫描模式下,向此寄存器写任意值都可以停止LSADC的自动扫描功能,需再写使能start才可以重新启动自动扫描) | 0x00000000 |
LSADC_CTRL9
LSADC_CTRL9为转换结果精度寄存器。
Offset Address: 0x0024 Total Reset Value: 0x0000_03FF
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:10] | - | reserved | 保留。 | 0x000000 |
| [9:0] | RW | lsadc_active_bit | LSADC转换结果精度。 10'b1111111111表示10比特精度; 10'b1111111110表示9比特精度; …… 10'b1000000000表示1比特精度 | 0x3FF |
LSADC_CTRL10
LSADC_CTRL10为LSADC_ZERO寄存器。
Offset Address: 0x0028 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:10] | - | reserved | 保留。 | 0x000000 |
| [9:0] | RW | lsadc_zero | 键盘无键按下时LSADC的值。 | 0x000 |
LSADC_CTRL11
LSADC_CTRL11为LSADC通道0数据寄存器。
Offset Address: 0x002C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:10] | - | reserved | 保留。 | 0x000000 |
| [9:0] | RO | lsadc_data_in0 | LSADC通道0扫描值。 | 0x000 |
LSADC_CTRL12
LSADC_CTRL12为LSADC通道1数据寄存器。
Offset Address: 0x0030 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:10] | - | reserved | 保留。 | 0x000000 |
| [9:0] | RO | lsadc_data_in1 | LSADC 通道1扫描值。 | 0x000 |
LSADC_CTRL13
LSADC_CTRL13为LSADC通道2数据寄存器。
Offset Address: 0x0034 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:10] | - | reserved | 保留。 | 0x000000 |
| [9:0] | RO | lsadc_data_in0 | LSADC通道2扫描值。 | 0x000 |
LSADC_CTRL14
LSADC_CTRL14为LSADC通道3数据寄存器。
Offset Address: 0x0038 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:10] | - | reserved | 保留。 | 0x000000 |
| [9:0] | RO | lsadc_data_in0 | LSADC通道3扫描值。 | 0x000 |
LSADC_CTRL20
LSADC_CTRL20为LSADC通道0平均算法数据寄存器。
Offset Address: 0x0050 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | - | reserved | 保留。 | 0x0000 |
| [15] | RO | lsadc_equ_value_valid_0 | LSADC通道0采样平均算法结果有效指示。 0:无效; 1:有效。 | 0x0 |
| [11:10] | - | reserved | 保留。 | 0x0 |
| [9:0] | RO | lsadc_equ_value_0 | LSADC 通道0采样平均算法结果。 | 0x000 |
LSADC_CTRL21
LSADC_CTRL21为LSADC通道1平均算法数据。
Offset Address: 0x0054 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | - | reserved | 保留。 | 0x0000 |
| [15] | RO | lsadc_equ_value_valid_1 | LSADC通道1采样平均算法结果有效指示。 0:无效; 1:有效。 | 0x0 |
| [11:10] | - | reserved | 保留。 | 0x0 |
| [9:0] | RO | lsadc_equ_value_1 | LSADC 通道1采样平均算法结果。 | 0x000 |
LSADC_CTRL22
LSADC_CTRL22为LSADC通道2平均算法数据寄存器。
Offset Address: 0x0058 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | - | reserved | 保留。 | 0x0000 |
| [15] | RO | lsadc_equ_value_valid_2 | LSADC通道2采样平均算法结果有效指示。 0:无效; 1:有效。 | 0x0 |
| [11:10] | - | reserved | 保留。 | 0x0 |
| [9:0] | RO | lsadc_equ_value_2 | LSADC 通道2采样平均算法结果。 | 0x000 |
LSADC_CTRL23
LSADC_CTRL23为LSADC通道3平均算法数据寄存器。
Offset Address: 0x005C Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | - | reserved | 保留。 | 0x0000 |
| [15] | RO | lsadc_equ_value_valid_3 | LSADC通道3采样平均算法结果有效指示。 0:无效; 1:有效。 | 0x0 |
| [11:10] | - | reserved | 保留。 | 0x0 |
| [9:0] | RO | lsadc_equ_value_3 | LSADC 通道3采样平均算法结果。 | 0x000 |
PWM
概述
PWM为脉冲宽度调节信号模块,用来输出周期性脉冲信号。
芯片提供3组PWM控制器:
- PWM0:最多提供16路脉冲宽度调制信号输出。其中PWM0_OUT15支持三对互补信号输出。
- PWM1:最多提供16路脉冲宽度调制信号输出。其中 PWM1_OUT0/PWM1_OUT1这两路各支持三对互补信号输出。
- SVB_PWM:最多提供3路脉冲宽度调制信号输出。
特点
对于每组PWM控制器:
- 工作时钟
- PWM0支持200MHz/Sensor clk0~3(详见3.2.6章节PERI_CRG4450)切换。
- PWM1/SVB_PWM固定200MHz。
- 支持预分频,分频比可配,最大支持256分频。
- 每路PWM输出支持独立使能。
- 支持周期方波输出模式,周期可配。
- 支持固定数目方波输出模式,方波数目可配。
- 支持脉冲信号左对齐、右对齐、中间对齐。
- 支持脉冲信号极性可控。
- 支持周期、占空比、对齐模式、极性等配置动态更新。
- 支持多路PWM信号同步输出,支持单次同步输出和循环输出两种同步模式。
- 支持占空比配置范围:0%~100%(占空比0%一直是低电平,占空比100%一直是高电平,配置流程如14.11.3.5 章节所示)。
- 支持周期配置范围:1Hz~10MHz。
工作方式
对齐模式
PWM输出的脉冲信号支持三种模式:左对齐,右对齐和中间对齐。可以通过配置PWM(x)_ctrl. pwm(x)_align_mode_cfg来设置每路PWM输出的脉冲对齐模式。
左对齐模式

将PWM(x)_ctrl. pwm(x)_align_mode_cfg 配置为 1。左对齐模式。
该模式下,PWM先根据占空比配置输出有效信号电平,再输出无效信号电平直到配置的周期输出完成。
有效信号电平默认为高,并可以通过配置PWM(x)_ctrl.pwm(x)_inv_cfg来控制。当PWM(x)_ctrl.pwm(x)_inv_cfg配置为1时,有效信号电平为低,对应的波形为PWM_INV。
右对齐模式

将PWM(x)_ctrl.pwm(x)_align_mode_cfg配置为0,PWM输出为右对齐模式。该模式下,PWM先输出无效信号电平,再根据占空比配置输出有效信号电平。
有效信号电平默认为高,并可以通过配置PWM(x)_ctrl.pwm(x)_inv_cfg来控制。当PWM(x)_ctrl.pwm(x)_inv_cfg配置为1时,有效信号电平为低,对应的波形为PWM_INV。
中间对齐模式
须知
中间对齐模式下仅支持占空比和周期数为偶数。

将PWM(x)_ctrl.pwm(x)_align_mode_cfg配置为2,PWM输出为中间对齐模式。
PWM先输出无效信号电平,再按占空比配置输出有效信号电平,最后再输出无效信号电平。整个周期中,有效信号电平位于中央。
有效信号电平默认为高,并可以通过配置PWM(x)_ctrl.pwm(x)_inv_cfg来控制。当PWM(x)_ctrl.pwm(x)_inv_cfg配置为1时,有效信号电平为低,对应的波形为PWM_INV。
互补输出
每路PWM最多可以支持三对互补信号输出,信号为PWM_OUT(x)_0_P/ PWM_OUT(x)_0_N/ PWM_OUT(x)_1_P/ PWM_OUT(x)_1_P/ PWM_OUT(x)_2_P/ PWM_OUT(x)_2_N。其中P/N为互补信号,互为反相输出。
三对互补信号共用一个脉冲周期配置,通过PWM(x)_period_cfg来配置。每对信号的占空比支持各自独立配置,分别通过 PWM(x)_duty0_cfg、PWM(x)_duty1_cfg、PWM(x)_duty2_cfg来控制。
其输出波形如图14-71:

同时也可以支持与对齐模式的配置组合,如配置成中间对齐模式的时候,输出波形如图14-72:

死区控制
互补信号输出模式还支持死区控制。即当输出信号从无效状态转变成有效状态时,延时若干个时钟周期后生效。
每路PWM提供两组死区延时时间配置寄存器(PWM(x)_dt_value_cfg.PWM(x)_dt_a_cfg/PWM(x)_dt_value_cfg.PWM(x)_dt_b_cfg)。当死区时间配置为0时,即无死区延时。每一个PWM信号都可以通过寄存器PWM(x)_dt_ctrl_cfg配置来选择各自的死区时间。
死区控制打开后的互补信号输出的波形请参考图14-73。

同步模式
须知
同步工作模式不支持预分频功能;即寄存器PWM(x)_ctrl中pwm(x)_pre_div_sel_cfg必须设置为0x0。
每个PWM控制器提供的多路PWM信号进行同步输出,各路的同步延时独立可配,如图14-74所示。

从起始点START开始,各路PWM根据PWM(x)_sync_delay_cfg寄存器配置来延时启动各自的PWM。每路PWM的周期,占空比,对齐方式等可以独立配置。
PWM同步模式下支持触发模式和循环输出两种模式。
- 触发模式(适用于输出若干个脉冲信号)
每路PWM输出信号完成配置脉冲输出信号数目后,则停止输出。直到下一次START启动为止。
注:触发模式需要把PWM(x)_sync_cfg.pwm(x)_sync_mux同步源头设置为非工作状态的PWM输出。
- 循环模式(周期性输出脉冲信号)
每路PWM通过PWM(x)_sync_cfg.pwm(x)_sync_mux来配置同步源头,当同步源头对应的PWM信号完成所配置PWM输出后,相关同步每一路PWM都会进行一次重载,重新进行START状态,以此实现周期性的输出。
注:循环模式设置同步延时(PWM(x)_sync_delay_cfg)的情况下,需要保证PWM(x)_sync_cfg.pwm(x)_sync_mux同步源头的延时值最小。
配置流程
通用模式
配置流程如下:
配置对应的CRG寄存器(PERI_CRG4448/PERI_CRG4450/PERI_CRG4452),打开时钟门控。
选择合适的预分频比,并写入寄存器PWM(x)_ctrl[11:8]。
通过计算得到需要的周期数和高电平拍数,并写入寄存器PWM(x)_duty0_cfg/PWM(x)_duty1_cfg/PWM(x)_duty2_cfg、PWM(x)_period。
如果需要周期性输出脉冲信号,将寄存器PWM(x)_ctrl[2]位域配置为1。如果需要输出固定个数脉冲信号,将寄存器PWM(x)_ctrl[2]配置为0,并将脉冲个数写入寄存器PWM(x)_num_cfg。
根据是否需要死区控制,配置寄存器PWM(x)_dt_value_cfg和PWM(x)_dt_ctrl_cfg。
根据输出脉冲信号对齐方式配置寄存器PWM(x)_ctrl[5:4]。
根据输出脉冲信号极性需求配置寄存器PWM(x)_ctrl[1]。
配置脉冲使能寄存器PWM(x)_ctrl[0],写入1,使能PWM输出。
---结束
例如:需要输出1个频率为4KHz,高电平占72.5%(即占空比),脉冲个数为10的波形,脉冲右对齐。
选择预分频系数为2分频,周期数配置为200MHz/2*1/4KHz=25000,四舍五入后为25000,十六进制为0x00061A8。高电平数配置为25000(周期数)x 72.5%(占空比)=18125,四舍五入后为18125,十六进制为0x00046CD。
按如下步骤进行寄存器操作,即可输出所需要的波形:
配置对应的CRG寄存器(如PERI_CRG4450[4])写入0x1,打开PWM时钟。
配置PWM(x)_ctrl寄存器为0x100。
向PWM(x)_period_cfg写入0x00061A7。
向PWM(x)_duty0_cfg写入0x00046CC。
向PWM(x)_num_cfg 写入0x9。
向PWM(x)_ctrl写入0x101(仅更新bit[0])。
读取PWM(x)_ctrl_st bit[0],等待bit0位为1(表示PWM正在输出方波)
读取PWM(x)_period和0x00061A7进行校验。
读取PWM(x)_duty0和0x00046CC进行校验。
读取PWM(x)_num bit[15:0]和0x09进行校验(当PWM(x)_ctrl_st bit[0]为1时表示PWM正在输出方波,当该位为0时表示已经输出完设定的方波数目)。
----结束
占空比0%和100%配置方法
占空比100%配置流程
例如:需要输出1个高电平。
选择预分频系数为2分频,周期数配置为200MHz/2*1/4KHz=25000,四舍五入后为25000,十六进制为0x00061A8。高电平数配置为25000(周期数)x100%(占空比)=25000,四舍五入后为25000,十六进制为0x00061A8。
按如下步骤进行寄存器操作,即可输出所需要的波形:
配置对应的CRG寄存器(如PERI_CRG4450[4])写入0x1,打开PWM时钟。
配置PWM(x)_ctrl寄存器为0x104。
向PWM(x)_period_cfg写入0x00061A7。
向PWM(x)_duty0_cfg写入0x00061A7。
向PWM(x)_ctrl写入0x105(仅更新bit[0])。
----结束
占空比0%配置流程
例如:需要输出1个低电平。
选择预分频系数为2分频,周期数配置为200MHz/2*1/4KHz=25000,四舍五入后为25000,十六进制为0x00061A8。低电平数配置为25000(周期数)x100%(占空比)=25000,四舍五入后为25000,十六进制为0x00061A8。
按如下步骤进行寄存器操作,即可输出所需要的波形:
配置对应的CRG寄存器(如PERI_CRG4450[4])写入0x1,打开PWM时钟。
配置PWM(x)_ctrl寄存器为0x106。(配置PWM正相输出占空比为100%,即PWM反相输出占空比为0%。这里配置pwm(x)_inv_cfg寄存器为1,PWM输出反相)
向PWM(x)_period_cfg写入0x00061A7。
向PWM(x)_duty0_cfg写入0x00061A7。
向PWM(x)_ctrl写入0x107(仅更新bit[0])。
----结束
同步模式
同步模式配置流程如下:
配置PWM同步模式,PWM(x)_sync_cfg bit[5]配置为0x1。
根据触发模式或循环模式配置寄存器。
触发模式:PWM(x)_sync_cfg bit[4]配置为0。
注:触发模式需要把PWM(x)_sync_cfg.pwm(x)_sync_mux同步源头设置为非工作状态的PWM输出。
循环模式:PWM(x)_sync_cfg bit[5]配置为1。并根据需要配置PWM重载信号源头,配置PWM(x)_sync_cfg bit[3:0]
注:循环模式设置同步延时(PWM(x)_sync_delay_cfg)的情况下,需要保证PWM(x)_sync_cfg.pwm(x)_sync_mux同步源头的延时值最小。
配置PWM信号的模式(同通用模式的步骤1~8)
配置PWM_sync_start寄存器的对应bit启动PWM。
例如:需要同步启动PWM0、PMW1、PMW5,则在PWM_sync_start寄存器写入0x23。
----结束
寄存器偏移地址变量表寄存器概览
PWM0寄存器基地址:0x0_110B_0000
PWM1寄存器基地址:0x0_1102_D000
SVB_PWM寄存器基地址:0x0_1102_9000
各模块的寄存器偏移地址中变量的取值范围和含义如表14-33所示。
| 变量名称 | 取值范围 | 描述 |
|---|---|---|
| x | 0~15 | PWM模块的16个通道 |
PWM寄存器概览
PWM寄存器概览如表14-34所示。
| 偏移地址 | 名称 | 描述 | 页码 |
|---|---|---|---|
| 0x0000+0x100×x | PWM(x)_period_cfg | PWM(x)周期配置寄存器 | 14-306 |
| 0x0004+0x100×x | PWM(x)_duty0_cfg | PWM(x)占空比0配置寄存器 | 14-306 |
| 0x0008+0x100×x | PWM(x)_duty1_cfg | PWM(x)占空比1配置寄存器 | 14-306 |
| 0x000C+0x100×x | PWM(x)_duty2_cfg | PWM(x)占空比2配置寄存器 | 14-306 |
| 0x0010+0x100×x | PWM(x)_num_cfg | PWM(x)输出方波数目配置寄存器 | 14-307 |
| 0x0014+0x100×x | PWM(x)_ctrl | PWM(x)工作模式配置寄存器 | 14-307 |
| 0x0020+0x100×x | PWM(x)_dt_value_cfg | PWM(x)死区时间配置寄存器 | 14-308 |
| 0x0024+0x100×x | PWM(x) _dt_ctrl_cfg | PWM(x)死区时间选择配置寄存器 | 14-309 |
| 0x0030+0x100×x | PWM(x)_sync_cfg | PWM(x)同步模式配置寄存器 | 14-309 |
| 0x0034+0x100×x | PWM(x)_sync_delay_cfg | PWM(x)同步延时配置寄存器 | 14-311 |
| 0x0040+0x100×x | PWM(x)_period | PWM(x)实时周期回读寄存器 | 14-311 |
| 0x0044+0x100×x | PWM(x)_duty0 | PWM(x)实时占空比0回读寄存器 | 14-311 |
| 0x0048+0x100×x | PWM(x)_duty1 | PWM(x)实时占空比1回读寄存器 | 14-311 |
| 0x004C+0x100×x | PWM(x)_duty2 | PWM(x)实时占空比2回读寄存器 | 14-312 |
| 0x0050+0x100×x | PWM(x)_num | PWM(x)方波数量实时回读寄存器。 | 14-312 |
| 0x0054+0x100×x | PWM(x)_ctrl_st | PWM(x)实时工作状态回读寄存器 | 14-312 |
| 0x0060+0x100×x | PWM(x)_dt_value | PWM(x)实时死区时间回读寄存器 | 14-313 |
| 0x0064+0x100×x | PWM(x) _dt_ctrl | PWM(x)实时死区时间选择回读寄存器 | 14-314 |
| 0x0074+0x100×x | PWM(x)_sync_delay | PWM(x)实时同步延时配置回读寄存器 | 14-315 |
| 0xFF0 | PWM_sync_start | PWM同步启动使能寄存器 | 14-315 |
PWM寄存器描述
PWM(x)_period_cfg
PWM(x)_period_cfg为PWM(x)周期配置寄存器。
Offset Address: 0x0000+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | pwm(x)_period_cfg | PWM x 周期配置。单位:时钟周期,实际值减一配置。 | 0x00000000 |
PWM(x)_duty0_cfg
PWM(x)_duty0_cfg为PWM(x)占空比0配置寄存器。
Offset Address: 0x0004+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | pwm(x)_duty0_cfg | PWM x 有效信号占空比0配置。单位:时钟周期,实际值减一配置。 | 0x00000000 |
PWM(x)_duty1_cfg
PWM(x)_duty1_cfg为PWM(x)占空比1配置寄存器。
Offset Address: 0x0008+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | pwm(x)_duty1_cfg | PWM x 有效信号占空比1配置。单位:时钟周期,实际值减一配置。 | 0x00000000 |
PWM(x)_duty2_cfg
PWM(x)_duty2_cfg为PWM(x)占空比2配置寄存器。
Offset Address: 0x000C+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | pwm(x)_duty2_cfg | PWM x 有效信号占空比2配置。单位:时钟周期,实际值减一配置。 | 0x00000000 |
PWM(x)_num_cfg
PWM(x)_num_cfg为PWM(x)输出方波数目配置寄存器。
Offset Address: 0x0010+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | - | reserved | 保留。 | 0x0000 |
| [15:0] | RW | pwm(x)_num_cfg | PWM x 输出方波的数目配置。实际值减一配置。 只在pwm(x)_keep配置为0时才生效。 | 0x0000 |
PWM(x)_ctrl
PWM(x)_ctrl为PWM(x)工作模式配置寄存器。
Offset Address: 0x0014+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:12] | - | reserved | 保留。 | 0x00000 |
| [11:8] | RW | pwm(x)_pre_div_sel_cfg | PWM x预分频控制。 0x0:不分频; 0x1:2分频; 0x2:4分频; 0x3:8分频; 0x4:16分频; 0x5:32分频; 0x6:64分频; 0x7:128分频; 0x8:256分频; 其他:不分频。 | 0x0 |
| [7:6] | - | reserved | 保留。 | 0x0 |
| [5:4] | RW | pwm(x)_align_mode_cfg | PWM x对齐模式控制。 00:右对齐模式; 01:左对齐模式; 10:中间对齐模式; 其他:保留。 | 0x0 |
| [3] | - | reserved | 保留。 | 0x0 |
| [2] | RW | pwm(x)_keep_cfg | PWM x输出模式控制。 0:输出pwm(x)_num个方波; 1:一直输出方波。 | 0x0 |
| [1] | RW | pwm(x)_inv_cfg | PWM x输出正反相控制。 0:正常; 1:反相。 | 0x0 |
| [0] | RW | pwm(x)_enable | PWM x使能控制。 0:关闭; 1:使能。 | 0x0 |
PWM(x)_dt_value_cfg
PWM(x)_dt_value_cfg为PWM(x) 死区时间配置寄存器。
Offset Address: 0x0020+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | RW | pwm(x)_dt_b_cfg | PWM x死区时间B,单位周期。0代表无死区。 | 0x0000 |
| [15:0] | RW | pwm(x)_dt_a_cfg | PWM x死区时间A,单位周期。0代表无死区。 | 0x0000 |
PWM(x)_dt_ctrl_cfg
PWM(x)_dt_ctrl_cfg为PWM(x) 死区时间选择配置寄存器。
Offset Address: 0x0024+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:6] | - | reserved | 保留。 | 0x0000000 |
| [5] | RW | pwm(x)_dts_out_2n_cfg | PWM_OUT(x)_2_N死区时间选择控制: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
| [4] | RW | pwm(x)_dts_out_2p_cfg | PWM_OUT(x)_2_P死区时间选择控制: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
| [3] | RW | pwm(x)_dts_out_1n_cfg | PWM_OUT(x)_1_N死区时间选择控制: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
| [2] | RW | pwm(x)_dts_out_1p_cfg | PWM_OUT(x)_1_P死区时间选择控制: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
| [1] | RW | pwm(x)_dts_out_0n_cfg | PWM_OUT(x)_0_N死区时间选择控制: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
| [0] | RW | pwm(x)_dts_out_0p_cfg | PWM_OUT(x)_0_P死区时间选择控制: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
PWM(x)_sync_cfg
PWM(x)_sync_cfg为PWM(x)同步模式配置寄存器。
Offset Address: 0x0030+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:6] | - | reserved | 保留。 | 0x0000000 |
| [5] | RW | pwm(x)_sync_enable | PWM同步工作模式使能。 0:普通模式; 1:开启同步工作模式,由PWM_SYNC_START启动PWM功能。 | 0x0 |
| [4] | RW | pwm(x)_sync_mode | PWM同步模式选择。 0:触发模式; 1:循环模式。 | 0x0 |
| [3:0] | RW | pwm(x)_sync_mux | 循环模式的重载信号源头选择。 0x0:来自PWM0 完成信号; 0x1:来自PWM1完成信号; 0x2:来自PWM2完成信号; 0x3:来自PWM3完成信号; 0x4:来自PWM4完成信号; 0x5:来自PWM5完成信号; 0x6:来自PWM6完成信号; 0x7:来自PWM7完成信号; 0x8:来自PWM8完成信号; 0x9:来自PWM9完成信号; 0xa:来自PWM10完成信号; 0xb:来自PWM11完成信号; 0xc:来自PWM12完成信号; 0xd:来自PWM13完成信号; 0xe:来自PWM14完成信号; 0xf:来自PWM15完成信号。 | 0x0 |
PWM(x)_sync_delay_cfg
PWM(x)_sync_delay_cfg为PWM(x)同步延时配置寄存器。
Offset Address: 0x0034+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RW | pwm(x)_sync_delay_cfg | PWM x同步模式启动延时配置寄存器。单位:周期,实际减一配置。 | 0x00000000 |
PWM(x)_period
PWM(x)_period为PWM(x)实时周期回读寄存器。
Offset Address: 0x0040+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | pwm(x)_period | PWM x 周期生效值。 | 0x00000000 |
PWM(x)_duty0
PWM(x)_duty0为PWM(x)实时占空比0回读寄存器。
Offset Address: 0x0044+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | pwm(x)_duty0 | PWM x 占空比0生效值。 | 0x00000000 |
PWM(x)_duty1
PWM(x)_duty1为PWM(x)实时占空比1回读寄存器。
Offset Address: 0x0048+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | pwm(x)_duty1 | PWM x 占空比1生效值。 | 0x00000000 |
PWM(x)_duty2
PWM(x)_duty2为PWM(x)实时占空比2回读寄存器。
Offset Address: 0x004C+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | pwm(x)_duty2 | PWM x 占空比2生效值。 | 0x00000000 |
PWM(x)_num
PWM(x)_num为PWM(x)方波数量实时回读寄存器。
Offset Address: 0x0050+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | RO | pwm(x)_num_cnt | PWM x 还需要输出的方波数目。 只有当pwm(x)_busy为1且pwm(x)_keep为0时才有意义。 | 0x0000 |
| [15:0] | RO | pwm(x)_num | PWM x 输出方波的数目生效值。 | 0x0000 |
PWM(x)_ctrl_st
PWM(x)_ctrl_st为PWM(x)实时工作状态回读寄存器。
Offset Address: 0x0054+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:12] | - | reserved | 保留。 | 0x00000 |
| [11:8] | RO | pwm(x)_pre_div_sel | PWM x预分频生效值。 0x0:不分频; 0x1:2分频; 0x2:4分频; 0x3:8分频; 0x4:16分频; 0x5:32分频; 0x6:64分频; 0x7:128分频; 0x8:256分频; 其它:不分频。 | 0x0 |
| [7:6] | - | reserved | 保留。 | 0x0 |
| [5:4] | RO | pwm(x)_align_mode | PWM x对齐模式生效值。 0:右对齐模式; 1:左对齐模式; 2:中间对齐模式; 保留 | 0x0 |
| [3] | - | reserved | 保留。 | 0x0 |
| [2] | RO | pwm(x)_keep | PWM x输出模式生效值。 0:输出PWM(x)_num个方波; 1:一直输出方波。 | 0x0 |
| [1] | RO | pwm(x)_inv | PWM x输出正反相生效值。 0:正常; 1:反相。 | 0x0 |
| [0] | RO | pwm(x)_busy | PWM x工作状态。 0:空闲; 1:工作。 | 0x0 |
PWM(x)_dt_value
PWM(x)_dt_value为PWM(x) 实时死区时间回读寄存器。
Offset Address: 0x0060+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:16] | RO | pwm(x)_dt_b | PWM x死区时间B生效值。 | 0x0000 |
| [15:0] | RO | pwm(x)_dt_a | PWM x死区时间A生效值。 | 0x0000 |
PWM(x)_dt_ctrl
PWM(x)_dt_ctrl为PWM(x) 实时死区时间选择回读寄存器。
Offset Address: 0x0064+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:6] | - | reserved | 保留。 | 0x0000000 |
| [5] | RO | pwm(x)_dts_out_2n | PWM_OUT(x) _2_N死区时间生效状态: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
| [4] | RO | pwm(x)_dts_out_2p | PWM_OUT(x)_2_P死区时间生效状态: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
| [3] | RO | pwm(x)_dts_out_1n | PWM_out(x) _1_n死区时间生效状态: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
| [2] | RO | pwm(x)_dts_out_1p | PWM_OUT(x)_1_P死区时间生效状态: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
| [1] | RO | pwm(x)_dts_out_0n | PWM_OUT (x)_0_N死区时间生效状态: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
| [0] | RO | pwm(x)_dts_out_0p | PWM_OUT(x)_0_P死区时间生效状态: 0:选择死区时间A; 1:选择死区时间B。 | 0x0 |
PWM(x)_sync_delay
PWM(x)_sync_delay为PWM(x)实时同步延时配置回读寄存器。
Offset Address: 0x0074+0x100×x Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
| [31:0] | RO | pwm(x)_sync_delay | PWM x同步模式启动延时配置生效值。 | 0x00000000 |
PWM_sync_start
PWM_sync_start为PWM同步启动使能寄存器。
Offset Address: 0xFF0 Total Reset Value: 0x0000_0000
| Bits | Access | Name | Description | Reset |
|---|---|---|---|---|
| [31:16] | - | resverd | 保留。 | 0x0000 |
| [15] | WO | pwm15_sync_start | PWM15启动配置寄存器,写1启动。 | 0x0 |
| [14] | WO | pwm14_sync_start | PWM14启动配置寄存器,写1启动。 | 0x0 |
| [13] | WO | pwm13_sync_start | PWM13启动配置寄存器,写1启动。 | 0x0 |
| [12] | WO | pwm12_sync_start | PWM12启动配置寄存器,写1启动。 | 0x0 |
| [11] | WO | pwm11_sync_start | PWM11启动配置寄存器,写1启动。 | 0x0 |
| [10] | WO | pwm10_sync_start | PWM10启动配置寄存器,写1启动。 | 0x0 |
| [9] | WO | pwm9_sync_start | PWM9启动配置寄存器,写1启动。 | 0x0 |
| [8] | WO | pwm8_sync_start | PWM8启动配置寄存器,写1启动。 | 0x0 |
| [7] | WO | pwm7_sync_start | PWM7启动配置寄存器,写1启动。 | 0x0 |
| [6] | WO | pwm6_sync_start | PWM6启动配置寄存器,写1启动。 | 0x0 |
| [5] | WO | pwm5_sync_start | PWM5启动配置寄存器,写1启动。 | 0x0 |
| [4] | WO | pwm4_sync_start | PWM4启动配置寄存器,写1启动。 | 0x0 |
| [3] | WO | pwm3_sync_start | PWM3启动配置寄存器,写1启动。 | 0x0 |
| [2] | WO | pwm2_sync_start | PWM2启动配置寄存器,写1启动。 | 0x0 |
| [1] | WO | pwm1_sync_start | PWM1启动配置寄存器,写1启动。 | 0x0 |
| [0] | WO | pwm0_sync_start | PWM0启动配置寄存器,写1启动。 | 0x0 |